首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UCanAccess插入行?

如何使用UCanAccess插入行?
EN

Stack Overflow用户
提问于 2016-03-07 14:07:24
回答 1查看 5.7K关注 0票数 1

我使用的是64位Windows8和NetBeans 8.1、Java8

我知道在Java8中jdbc-odbc桥被移除了。我正在使用ucanaccess,但我有一个问题

我正在尝试使用以下代码从MS Access读取数据

(1)

代码语言:javascript
复制
package javaapplication1;
/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    re=st.executeQuery("select * from db1");
    while(re.next())
    {
       System.out.println(re.getString(1));     
    }
    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }
}    
}

我已经在msaccess中手动插入数据了

运行:

代码语言:javascript
复制
a
a
b
BUILD SUCCESSFUL (total time: 1 second)

但是当我尝试使用以下Java代码插入数据时

(2)

代码语言:javascript
复制
package javaapplication1;
/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    re=st.executeQuery("insert into db1 values('a','a')");

    System.out.println("inserted")     

    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }
}  
}

我得到了这个错误:

代码语言:javascript
复制
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 java.lang.NullPointerException java.lang.NullPointerException
BUILD SUCCESSFUL (total time: 0 seconds)

在第三次尝试之后

(3)

代码语言:javascript
复制
/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  String ID ="username"; 
  String NAME="password";  


  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    String q ="insert into db1 values('"+ID+"','"+NAME+"'))";
    st.executeQuery(q);

    System.out.println("inserted")     

    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }

}
}

我尝试了许多不同的插入方式:

代码语言:javascript
复制
String q ="insert into db1 (ID,NAME) values('"+ID+"','"+NAME+"'))";

当我的注释已经传递了上边并尝试直接插入值时

代码语言:javascript
复制
String q ="insert into db1 (ID,NAME) values('a','b'))";

但是得到了这个错误

代码语言:javascript
复制
run:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 unexpected token: )
BUILD SUCCESSFUL (total time: 0 seconds)
EN

回答 1

Stack Overflow用户

发布于 2016-03-07 20:48:32

您正在尝试使用executeQuery执行插入操作,但executeQuery仅用于SELECT查询。请尝试使用executeUpdate

代码语言:javascript
复制
String q = "INSERT INTO db1 ([ID], [NAME]) VALUES (?, ?)";
PreparedStatement st = cn.prepareStatement (q);
st.setString(1, "a");
st.setString(2, "b");
st.executeUpdate();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35837222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档