Java JDBC存储过程语法
我是使用JDBC和MariaDB创建存储过程的初学者。当我创建过程时,我得到一个错误。我从昨天开始就遇到了这个问题:Java JDBC存储过程语法,java,jdbc,mariadb,Java,Jdbc,Mariadb,我是使用JDBC和MariaDB创建存储过程的初学者。当我创建过程时,我得到一个错误。我从昨天开始就遇到了这个问题: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use n
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@auth_id varchar(15),@auth_fname varchar(20) output,@auth_lname varchar(20) o...' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
到目前为止,我尝试了以下代码。我不知道是什么原因造成了这个错误
public class Jdbcc {
Connection con;
PreparedStatement pst;
public Jdbcc()
{
Connect();
}
public void Connect()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/abclibrary", "root","");
String str = "CREATE PROCEDURE authors @auth_id varchar(15), @auth_fname varchar(20) output, @auth_lname varchar(20) output AS SELECT @auth_fname=auth_fname,@auth_lname= auth_lname FROM authors where auth_id=@auth_id";
Statement stmt = con.createStatement();
int k = stmt.executeUpdate(str);
System.out.println("Created.......");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[])
{
Jdbcc jk = new Jdbcc();
}
}
注意空间:
String str=“创建过程作者@auth\u id varchar(15)、@auth\u fname varchar(20)输出、@auth\u lname varchar(20)输出”
+“作为”
+“选择@auth\u fname=auth\u fname,@auth\u lname=auth\u lname”//此处缺少空格
+“来自作者”//和此处
+“其中auth_id=@auth_id”;
auth\u lnameFROM
和authorswhere
是问题所在使用以下方法创建存储过程:
String str=“创建过程作者(p\u auth\u id varchar(15)、OUT p\u auth\u fname varchar(20)、OUT p\u auth\u lname varchar(20))\n”+
“开始\n”+
从auth\u id=p\u auth\u id的作者中选择auth\u fname,auth\u lname到p\u auth\u fname,p\u auth\u lname;\n+
“结束;”;
我所作的改动如下:
- 不要用
作为过程参数名称的前缀。我在参数名中添加了@
前缀,这样它们就不会与列名冲突p
- 您需要将过程参数列表用括号括起来
…(
)
- 通过在参数名称之前指定
,而不是在参数名称之后指定OUT
来识别输出参数Output
- 您不能像在其他数据库中那样编写
。而是写选择variable1=column1,variable2=column2,…
选择column1,column2。。。分为变量1、变量2、…
- 程序主体已包装在
中<代码>结束代码>块BEGIN
CREATE或REPLACE procedure…
而不是CREATE procedure…
,这将替换现有的存储过程
另请参见。我不认为这是您要问的具体问题,但是您通过连接字符串创建的SQL在
auth\u lname
和from
之间以及作者之间和where
之间需要空格。那么如何正确编写它呢sir@NisaYathu-保存格式要容易得多。然而,很少有个人和团队开始使用Java15。对于低于15的版本,避免此类问题的最佳方法是首先键入”
,然后在双引号之间复制并粘贴字符串,IDE会自动将字符串分成多行,保留空格,并转义字符,如\
、双引号等。authors@auth\u id varchar(15)、@auth\u fname varchar(20).
应该在括号内。检查语法在我尝试了代码,但相同的错误我更新了代码,请看仍然有问题