2015-02-07 101 views
0

我正在使用netbeans和MS Access 2013.我写了一个简单的程序来将字符串变量的值存储到数据库中。数据库名称是users.accdb。
表:user1字段:uid类型:(短文本)MS access 2013 - java字符串

String name =“”; 尝试{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 

Connection conn = DriverManager.getConnection("jdbc:odbc:Driver= 
{Microsoft Access Driver (*.mdb, *.accdb)}; 
Dbq=F:\\users.accdb"); 

Statement stmt = conn.createStatement(); 

stmt.execute("insert into user1(uid) values("+name+")"); 

conn.close(); stmt.close(); 
}catch(SQLException se){ 
         se.printStackTrace(); 
         } 
  1. 当我把与像在字符串变量名“弗兰克”字母的任何字符串,它不存储在数据库中。

  2. 如果我在字符串变量中放置字符串如数字“123”,它将完全没有任何错误地存储。

  3. 如果我简单地在查询中提到一个字符串,它将被存储。

当事情没有存储在数据库中,我得到这个:[微软] [ODBC Microsoft Access驱动程序]语法错误(缺少操作员)在查询表达式“坦率”

有任何人都面临着类似的东西这个..?

回答

0

您在插入语句中缺少引号。因此,而不是

insert into user1(uid) values("+name+")" 

使用

insert into user1(uid) values(\'"+name+"\')" 

您查询是容易受到SQL注入。如果你想避免这种情况并摆脱上面缺少的引号,你应该使用PreparedStatement

+0

当我把报价放在你说的时候,一切都很好。这是一种新的语法吗? ..我使用的语法似乎与MS Access 2010和07一起工作。请解释。 – 2015-02-08 02:39:23

+0

没有它没有。你需要引用字符字段。 – SMA 2015-02-08 10:32:26