欢迎进入windows社区论坛,与300万技术人员互动交流 >>进入 使用dbutils连接sqlserver插入失败的问题 帅宏军 一、问题描述: 使用dbutils对数据库sqlserver进行插入操作时,失败,提示参数?不可识别。代码如下 [java] view plaincopyprint? public void in
欢迎进入windows社区论坛,与300万技术人员互动交流 >>进入
使用dbutils连接sqlserver插入失败的问题
帅宏军
一、问题描述:
使用dbutils对数据库sqlserver进行插入操作时,失败,提示参数?不可识别。代码如下
[java] view plaincopyprint?
public void insert(customer customer) {
string sql = insert into customer values(?,?,?,?,?,?,?,?,?);
object[] args = { customerutils.getid(), customer.getname(),
customer.getgender(), customer.getbirthday(),
customer.getcellphone(), customer.getemail(),
customer.getpreference(), customer.gettype(),
customer.getdescription() };
// 在执行这段代码时就出错了
queryrunner queryrunner = new queryrunner(jdbcutils.getdatasource());
try {
queryrunner.update(sql, args);
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
public void insert(customer customer) {
string sql = insert into customer values(?,?,?,?,?,?,?,?,?);
object[] args = { customerutils.getid(), customer.getname(),
customer.getgender(), customer.getbirthday(),
customer.getcellphone(), customer.getemail(),
customer.getpreference(), customer.gettype(),
customer.getdescription() };
// 在执行这段代码时就出错了
queryrunner queryrunner = new queryrunner(jdbcutils.getdatasource());
try {
queryrunner.update(sql, args);
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
问题原因发现是sqlserver的jdbc驱动在判断占位符类型的时候有问题;具体的就是获得parametermetadata的时候出了问题,这个时候可以用一个knowparatype的参数避免这个问题,就是在创建 queryrunner的时候,提供一个true参数。
二、解决方法
附上代码
[java] view plaincopyprint?
public void insert(customer customer) {
string sql = insert into customer values(?,?,?,?,?,?,?,?,?);
object[] args = { customerutils.getid(), customer.getname(),
customer.getgender(), customer.getbirthday(),
customer.getcellphone(), customer.getemail(),
customer.getpreference(), customer.gettype(),
customer.getdescription() };
//关键是这句加一个参数true
queryrunner queryrunner = new queryrunner(jdbcutils.getdatasource(),
true);
try {
queryrunner.update(sql, args);
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
public void insert(customer customer) {
string sql = insert into customer values(?,?,?,?,?,?,?,?,?);
object[] args = { customerutils.getid(), customer.getname(),
customer.getgender(), customer.getbirthday(),
customer.getcellphone(), customer.getemail(),
customer.getpreference(), customer.gettype(),
customer.getdescription() };
//关键是这句加一个参数true
queryrunner queryrunner = new queryrunner(jdbcutils.getdatasource(),
true);
try {
queryrunner.update(sql, args);
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}