如果没有任何错误,则无法将数据插入Java数据库
我已尝试添加stmt.executeUpdate;要插入到数据库,但它仍然不工作!!处理后,不会显示任何错误,但不会将任何数据插入数据库如果没有任何错误,则无法将数据插入Java数据库,java,jdbc,Java,Jdbc,我已尝试添加stmt.executeUpdate;要插入到数据库,但它仍然不工作!!处理后,不会显示任何错误,但不会将任何数据插入数据库 try { // do insert String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)"; for(int i = 1; i < r.length; i++)
try {
// do insert
String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";
for(int i = 1; i < r.length; i++)
{
stmt = conn.prepareStatement(preparedSQL);
// SQL parameters
setString(stmt, i++, Num);
setString(stmt, i++, r[i]);
stmt.executeQuery();
}
stmt.executeUpdate();
stmt.close();
} catch (SQLException e) {
PrintWriter out = new PrintWriter(new OutputStreamWriter(res
.getOutputStream(), "Big5"), true);
res.setContentType("text/html; charset=utf-8");
res.setHeader("cache-control", "no-cache");
res.setHeader("Pragma", "no-cache");
res.setIntHeader("expiry", -1000);
out.println("..<!--" + RSCommonUtil.HTMLEncode(e.toString()) + "para in title not valid" +
RSCommonUtil.HTMLEncode(pDate.toString())
+ " " + RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[0].toString()) + " "
+ RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[1].toString()) + "-->");
debug.p("insert error" + e);
failed = true;
} finally {
try {
// finalize DB
if (stmt != null) {
stmt.close();
stmt = null;
}
} catch (SQLException sqle) {
}
}
executeUpdate用于创建、删除、插入、更新、删除等,即更新表,executeQuery用于选择。它返回ResultSet的一个实例
有关简单说明,请参见此处:
另外,setString的参数数量不正确,应该作为语句对象的方法调用,setString方法的parameterIndex第一个参数应该是i,否则每次迭代都会增加三次。我还将循环更改为从0开始,不知道为什么从1开始,因为普通数组应该从0开始
因此,您的主块将如下所示:
...
// do insert
String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";
PreparedStatement stmt = conn.prepareStatement(preparedSQL);
for(int i = 0; i < r.length; i++)
{
// SQL parameters
stmt.setString(i, Num);
stmt.setString(i, r[i]);
stmt.executeUpdate();
}
stmt.close();
...
在try块中,尝试按如下方式重写代码:
String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";
for(int i = 1; i < r.length; i++)
{
stmt = conn.prepareStatement(preparedSQL);
// SQL parameters
stmt.setString(1, Num);
stmt.setString(2, r[i]);
stmt.executeUpdate();
stmt.close();
}
setString方法只接受两个参数
public void setString参数索引,字符串值
此处“paramIndex”指的是准备语句中参数的索引,“value”指的是要在该索引处插入的值
prepared语句接口的executeQuery方法用于SELECT查询。但在您的情况下,由于该语句是一个INSERT查询,因此必须使用executeUpdate方法。此方法用于创建、删除、更新、插入等语句
有关准备好的语句和示例代码的更多信息,请参阅。其他答案都是正确的,并提供了良好的建议。关于这个问题的一些评论也是如此。我可以再添加一个想法,再加上一个完整的工作示例应用程序,它使用
利用资源进行尝试
使用该语法可以缩短代码,并确保适当关闭资源
示例应用程序
pkey:0819123b-5c7f-4859-bd1b-f9dac82b855f |姓名:杰西·约翰逊|第一联系人:2019-08-03T18:16:30.367840Z
完成了
从您的问题标题中删除紧急帮助:请记住,虽然问题对您来说是紧急的,但不应该对我们来说是紧急的,因为您的问题/问题并不比本网站上的任何其他问题更重要。为了提高您获得快速、体面回答的机会,而不是说紧急情况,请根据链接尽量问最好的问题。您使用的是executeQuery,而不是executeUpdate。您只需要准备一次语句:这就是一个准备好的语句的全部要点。至少要打印stacktrace,因为您可能缺少一个密钥异常。如果出现错误,您不会向控制台打印任何内容。仅在HTML注释内部,以进行输出。我猜你还没有读过这个方法产生的HTML注释。您确实不应该将HTML生成与数据库访问代码混合使用。另一个可能的问题是:如果您的数据库连接未设置为自动提交,则您的插入未提交。另外,您将在try主体的末尾关闭一次stmt,在finally块中关闭第二次stmt。
package work.basil.example;
import org.h2.jdbcx.JdbcDataSource;
import java.sql.*;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.UUID;
public class H2DateTimeExample
{
public static void main ( String[] args )
{
H2DateTimeExample app = new H2DateTimeExample ();
app.demo ();
}
private void demo ( )
{
JdbcDataSource dataSource = new JdbcDataSource ();
dataSource.setURL ( "jdbc:h2:mem:offsetdatetime_example_db;DB_CLOSE_DELAY=-1" ); // Set `DB_CLOSE_DELAY` to `-1` to keep in-memory database in existence after connection closes.
dataSource.setUser ( "scott" );
dataSource.setPassword ( "tiger" );
// Create table.
String sql = "CREATE TABLE person_ ( \n" +
" pkey_ UUID NOT NULL DEFAULT RANDOM_UUID() PRIMARY KEY , \n" +
" name_ VARCHAR NOT NULL , \n" +
"first_contacted_ TIMESTAMP WITH TIME ZONE NOT NULL " +
") ;";
// System.out.println ( sql );
try (
Connection conn = dataSource.getConnection () ;
Statement stmt = conn.createStatement () ;
)
{
stmt.execute ( sql );
} catch ( SQLException e )
{
e.printStackTrace ();
}
// Insert row.
sql = "INSERT INTO person_ ( name_ , first_contacted_ ) \n";
sql += "VALUES ( ? , ? ) \n";
sql += ";";
try (
Connection conn = dataSource.getConnection () ;
PreparedStatement pstmt = conn.prepareStatement ( sql , Statement.RETURN_GENERATED_KEYS ) ;
)
{
OffsetDateTime odt = OffsetDateTime.now ( ZoneOffset.UTC );
pstmt.setString ( 1 , "Jesse Johnson" );
pstmt.setObject ( 2 , odt );
pstmt.executeUpdate ();
ResultSet rs = pstmt.getGeneratedKeys ();
// System.out.println( "INFO - Reporting generated keys." );
// while ( rs.next() ) {
// UUID uuid = rs.getObject( 1 , UUID.class );
// System.out.println( "generated keys: " + uuid );
// }
} catch ( SQLException e )
{
e.printStackTrace ();
}
// Query table.
sql = "TABLE person_ ;";
try (
Connection conn = dataSource.getConnection () ;
PreparedStatement pstmt = conn.prepareStatement ( sql ) ;
)
{
try ( ResultSet rs = pstmt.executeQuery () ; )
{
while ( rs.next () )
{
UUID pkey = rs.getObject ( "pkey_" , UUID.class );
String name = rs.getString ( "name_" );
OffsetDateTime firstContacted = rs.getObject ( "first_contacted_" , OffsetDateTime.class );
System.out.println ( "pkey: " + pkey + " | name: " + name + " | firstContacted: " + firstContacted );
}
}
} catch ( SQLException e )
{
e.printStackTrace ();
}
System.out.println ( "Done." );
}
}