最后插入的记录未反映在使用 JDBC 的 mysql 中的 select 语句中

Posted

技术标签:

【中文标题】最后插入的记录未反映在使用 JDBC 的 mysql 中的 select 语句中【英文标题】:last insterted record does not reflect in select statement in mysql using JDBC 【发布时间】:2013-03-14 13:29:13 【问题描述】:

所以这是我的问题.. 我正在尝试在具有两个字段国家 ID 和国家名称的国家表中添加国家名称。我通过用户输入的 jsp 页面获取国家名称,并列出表中所有可用的国家名称,但问题是用户插入的名称不会显示在列表页面中......

这里是代码 sn-ps

用于插入记录

public boolean insertCountry(CountryBean bean)


String country=bean.getCountryname();

boolean flag=false;

int result;



try


    conn=connection.createConnection();


    stmt=conn.createStatement();
    String sqlInsert="insert into country(Country_Name) values('"+country+"')";

    result=stmt.executeUpdate(sqlInsert);






    if(result>0)
        flag=true;
    else
        flag=false;








catch(Exception e)

    e.printStackTrace();


return flag;

用于显示记录

公共列表 ListCountry() 抛出 SQLException

    List<CountryBean> list=new ArrayList<CountryBean>();
    CountryBean bean;

    Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;



    try
    

        conn=connection.createConnection();

        stmt=conn.createStatement();

        String sqlselect="select * from country order by country_name";
        rs=stmt.executeQuery(sqlselect);

        if(rs!=null)
        
            while(rs.next())
            
                bean=new CountryBean();
                bean.setCountryname(rs.getString("country_name"));
                System.out.println(rs.getString("country_name"));

                list.add(bean);

            


        
    

        catch(Exception e)
        
            e.printStackTrace();
        
    finally
    
        if(rs!=null)
            rs.close();
        

        if(conn!=null)
            conn.close();
        
        if(stmt!=null)
            stmt.close();
        

    

    return list;


listing jsp page

<table border="2">
    <tr>
        <th>Country Name</th>

    </tr>
    <%
        for (int i = 0; i < list.size(); i++) 
                CountryBean bean = list.get(i);
    %>
            <tr>
    <td><%=bean.getCountryname()%></td>
             <%
                
                
     %>

公共静态连接 createConnection() 尝试 Class.forName("com.mysql.jdbc.Driver");

             conn=DriverManager.getConnection("jdbc:mysql://localhost:3309/ecom_db","root","root");

    
    catch(Exception e)
    
        e.printStackTrace();


    
    return conn;
                                                                     Name of the country is successfully entered in to the database nothing wrong with the queries but the problem is it does not appear in to the list in table tag.list.size method returns only previously inserted countries not the new one.

【问题讨论】:

我没有看到事务提交,您的连接是否设置为自动提交? 不要将 html 与 Java 代码混淆。请避免使用这种可恶的scriptlet,这是高度不鼓励的,并始终使用PreparedStatements 来缓解SQL 注入攻击。 OP 在我的答案评论部分发布了连接声明。由于连接字符串中没有参数,所以设置为自动提交模式。 【参考方案1】:

您的显示记录功能看起来非常混乱。可能没有正确发布。 我假设您已通过提供 DB 的名称和密码正确地创建了连接。

Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager
                .getConnection(
                        "jdbc:mysql://localhost:3306/Twitter?jdbcCompliantTruncation=false&amp;useServerPrepStmts=false&amp;rewriteBatchedStatements=true",
                        "root", "xxxx");

您的插入查询在我看来是错误的。缺少分号。

  String sqlInsert="insert into country(Country_Name) values('"+country+"');";
  String sqlselect="select * from country order by country_name;";

发布任何被抛出的异常。

编辑:显示记录功能已被 OP 修正。我的误解是;是必须的。有关更多说明,请参阅this。

public static  Connection createConnection()
    
        try
        
            Class.forName("com.mysql.jdbc.Driver");

    conn=DriverManager.getConnection("jdbc:mysql://localhost:33/ecom_db","root","root");

        
        catch(Exception e)
        
            e.printStackTrace();

        
        return conn;
            

【讨论】:

公共静态连接 createConnection() try Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3309/ecom_db","root","root"); 捕捉(异常 e) e.printStackTrace(); 返回连接;国家名称已成功输入到数据库中,查询没有问题,但问题是它没有出现在表 tag.list.size 的列表中,方法只返回以前插入的国家,而不是新的。 在数据库中运行相同的检索查询是否适合您? 是的,如果我在数据库中编写相同的查询,它在新添加的国家/地区执行得很好,但它在编码中不起作用不知道为什么?

以上是关于最后插入的记录未反映在使用 JDBC 的 mysql 中的 select 语句中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Data Direct DB2 JDBC 驱动程序更新/插入未记录表的查询

使用JDBC一次插入多条记录(以MySQL为例)

记录未使用 javascript 正确插入到 ms 访问数据库中

SQLite 数据插入未反映在表中

使用 JDBC 获取 Oracle 11g 的最后插入 ID

Spring JDBC - 最后插入的 id