V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wyk1184
V2EX  ›  程序员

关于 java 的 jdbc 的问题 求解答

  •  
  •   wyk1184 · 2014-08-16 21:46:46 +08:00 · 3446 次点击
    这是一个创建于 3751 天前的主题,其中的信息可能已经有所发展或是发生改变。
    package demo1;


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class DbConn {
    // 创建静态全局变量
    static Connection conn;

    static Statement st;

    public static void main(String[] args) {
    insert(); //插入添加记录
    query();

    }

    /* 插入数据记录,并输出插入的数据记录数*/
    public static void insert() {

    conn = getConnection1(); // 首先要获取连接,即连接到数据库

    try {
    String sql = "INSERT INTO emp(user_id,user_name,user_salary)"
    + " VALUES ('4', 'big','7777')"; // 插入数据的sql语句

    st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象//Statement st=?

    int count = st.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数

    System.out.println("向staff表中插入 " + count + " 条数据"); //输出插入操作的处理结果

    conn.close(); //关闭数据库连接

    } catch (SQLException e) {
    System.out.println("插入数据失败" + e.getMessage());
    }
    }

    /* 更新符合要求的记录,并返回更新的记录数目*/


    /* 获取数据库连接的函数*/
    public static Connection getConnection1() {
    Connection con = null; //创建用于连接数据库的Connection对象
    try {
    Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动

    con = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/myuser","root", "1");// 创建数据连接
    } catch (Exception e) {
    System.out.println("数据库连接失败" + e.getMessage());
    }
    return con; //返回所建立的数据库连接
    }
    public static void query() {

    conn = getConnection1(); //同样先要获取连接,即连接到数据库
    try {
    String sql = "select * from emp"; // 查询数据的sql语句
    st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量

    ResultSet rs = st.executeQuery(sql); //执行sql查询语句,返回查询数据的结果集
    System.out.println("最后的查询结果为:");
    while (rs.next()) { // 判断是否还有下一个数据

    // 根据字段名获取相应的值
    String name = rs.getString("user_name");
    int name_id = rs.getInt("name_id");
    String user_salary = rs.getString("user_salary");

    //输出查到的记录的各个字段的值
    System.out.println(name + " " + name_id + " " +user_salary+ " ");
    }
    conn.close(); //关闭数据库连接z

    } catch (SQLException e) {
    System.out.println("查询数据失败");
    }
    }
    }



    代码很简单 一个 insert() 一个query()
    插入一条数据之后 然后再查询一下,发现怎么都不显示结果 ,有没有大神帮忙看看什么问题。。
    好想是rs这个对象一直没有获取到值。。。。
    8 条回复    2014-08-17 15:28:05 +08:00
    Aegwynn
        1
    Aegwynn  
       2014-08-16 22:17:32 +08:00   ❤️ 1
    我能吐槽一下这代码麽。。。
    conn.commit();
    close()建议放在finally中。
    wyk1184
        2
    wyk1184  
    OP
       2014-08-16 23:56:57 +08:00
    @Aegwynn  加一个提交吗 我这怎么还是查不出来数据呢
    SoloCompany
        3
    SoloCompany  
       2014-08-16 23:58:02 +08:00
    建议用 glist
    现在的 V2 的 Markdown 支持还没公开,这样贴代码看起来真心累
    如果你是说插入的数据查询不到,然后在 mysql 或其它 console 中能看到的话
    那么很可能就是你使用 Connection 的方法不对了

    如果你从头到尾都是用同一个 Connection,那么应该没问题

    如果你先申请了一个 conn1,然后一不小心手贱又多申请了一个 conn2
    然后在其中一个 conn1 中执行了 insert,即使已经 commit 了,而 conn2 也是处于事务状态,那么很可能它是没法看到 conn1 中 insert 的结果的,请自行验证
    xiluo
        4
    xiluo  
       2014-08-17 02:23:08 +08:00
    xiluo
        5
    xiluo  
       2014-08-17 02:23:40 +08:00
    xiluo
        6
    xiluo  
       2014-08-17 02:25:08 +08:00
    仔细看看27行和73行
    incompatible
        7
    incompatible  
       2014-08-17 04:22:48 +08:00 via Android
    @xiluo 天啊 眼睛太尖了
    xiaomao
        8
    xiaomao  
       2014-08-17 15:28:05 +08:00
    搜索一下 单例模式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2831 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:19 · PVG 15:19 · LAX 23:19 · JFK 02:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.