2017-04-19 56 views
0

我试图从最后2小时我不知道什么是错的。也让我知道我怎么能测试,如果连接是全成或不..它是现在..但我仍想知道..使用JDBC在MyQSL中插入多个数据(列表)


错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?)'

我的代码:

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
static final String DB_URL = "jdbc:mysql://localhost:3306/medicinedb"; 
static final String USER = "root"; 
static final String PASS = ""; 
static final String DRIVER = "com.mysql.jdbc.Driver"; 

public boolean saveMedicine(List<MedicineName> medicineName) throws ClassNotFoundException { 
    Connection conn = null; 
    Statement stmt = null; 

    try { 
     Class.forName(DRIVER); 

     //STEP 3: Open a connection 
     System.out.println("Connecting to database..."); 

     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     //STEP 4: Execute a query 
     System.out.println("Creating statement..."); 

     stmt = conn.createStatement(); 
     for (MedicineName element : medicineName) { 

      String sql; 
      sql = " insert into medicinename (name, pgurl)" + " values 
      (?, ?)"; 
      System.out.println(conn); 

      PreparedStatement preparedStmt = conn.prepareStatement(sql); 
      preparedStmt.setString(1, element.getName()); 
      preparedStmt.setString(2, element.getPgurl()); 
      stmt.executeUpdate(sql); 
     } 

     stmt.close(); 
     conn.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return true; 
} 
+0

你可以试试用这个'sql =“插入药名(name,pgurl)的值(?,?)”;' –

+0

同样的错误...... @ YCF_L – doe

+0

你的'name和pgurl'类型是什么r数据库 –

回答

0

为什么要使用Statement和Prepared语句。您正在使用Statement执行操作。因此它没有价值。取下声明

stmt = conn.createStatement(); 

并执行以下操作

PreparedStatement preparedStmt = conn.prepareStatement(sql); 
     preparedStmt.setString(1, element.getName()); 
     preparedStmt.setString(2, element.getPgurl()); 
     //stmt.executeUpdate(sql); 
     preparedStmt .executeUpdate(sql); 
0
  1. 您在stmpreparedStmt之间的搭配,你必须执行preparedStmt而不是stm

  2. 当你要执行多个语句作为一个单元,再就是其良好的使用声明批处理工作,而不是例如:

PreparedStatement preparedStmt; String sql; conn.setAutoCommit(false); for (MedicineName element : medicineName) { sql = "insert into medicinename (name, pgurl) values (?, ?)"; System.out.println(conn); preparedStmt = conn.prepareStatement(sql); preparedStmt.setString(1, element.getName()); preparedStmt.setString(2, element.getPgurl()); preparedStmt.addBatch(sql); } preparedStmt.executeBatch(); conn.commit();
0

使用

String sql = "insert into medicinename (name, pgurl) values (?, ?)"; 
        PreparedStatement preparedStmt = conn.prepareStatement(sql); 
        preparedStmt.setString (1, element.getName()); 
        preparedStmt.setString (2, element.getPgurl()); 
        preparedStmt.executeUpdate(); 

you should delete executeUpdate(sql); to executeUpdate(); 
相关问题