Java – 从MySQL数据库获取数据

我已经连接到一个MySQL数据库,它包含四个字段(第一个是ID,后者每个都包含varchar字符串)。

我试图获取数据库的最后一行并检索字段的内容,以便我可以将它们设置为变量(一个int和三个字符串)并在以后使用它们。

到目前为止,我有最低限度的连接,我从哪里开始? 正如你所看到的,我已经尝试编写一个SQL语句来获取最后一行但是从那里出现了所有错误,我不知道如何将它拆分为单独的字段。

Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", ""); Statement st = con.createStatement(); String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;"); st.getResultSet().getRow(); con.close(); 

干得好 :

 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection("jdbc:mysql://localhost/t", "", ""); Statement st = con.createStatement(); String sql = ("SELECT * FROM posts ORDER BY id DESC LIMIT 1;"); ResultSet rs = st.executeQuery(sql); if(rs.next()) { int id = rs.getInt("first_column_name"); String str1 = rs.getString("second_column_name"); } con.close(); 

rs.getIntrs.getString您可以从1开始传递column_id ,但我更喜欢传递column_name作为其更具信息性,因为您不必查看数据库table ,哪个index是哪个column

更新: rs.next

boolean next()抛出SQLException

将光标从当前位置向前移动一行。 ResultSet游标最初位于第一行之前; 对方法的第一次调用使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。

当对next方法的调用返回false时,光标位于最后一行之后。 任何需要当前行的ResultSet方法的调用都将导致抛出SQLException。 如果结果集类型为TYPE_FORWARD_ONLY,则由供应商指定其JDBC驱动程序实现是返回false还是在后续调用next时抛出SQLException。

如果为当前行打开输入流,则对该方法的调用将隐式关闭它。 读取新行时,将清除ResultSet对象的警告链。

返回:如果新的当前行有效,则返回true; 如果没有更多行,则返回false抛出:SQLException – 如果发生数据库访问错误或在关闭的结果集上调用此方法

参考

这样的事情会做:

 public static void main(String[] args) { Connection con = null; Statement st = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/t"; String user = ""; String password = ""; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, user, password); st = con.createStatement(); rs = st.executeQuery("SELECT * FROM posts ORDER BY id DESC LIMIT 1;"); if (rs.next()) {//get first result System.out.println(rs.getString(1));//coloumn 1 } } catch (SQLException ex) { Logger lgr = Logger.getLogger(Version.class.getName()); lgr.log(Level.SEVERE, ex.getMessage(), ex); } finally { try { if (rs != null) { rs.close(); } if (st != null) { st.close(); } if (con != null) { con.close(); } } catch (SQLException ex) { Logger lgr = Logger.getLogger(Version.class.getName()); lgr.log(Level.WARNING, ex.getMessage(), ex); } } } 

你可以像这样迭代结果:

 while(rs.next()) { System.out.println(rs.getString("Colomn_Name"));//or getString(1) for coloumn 1 etc } 

还有许多其他伟大的教程,如下列出一些:

至于你使用Class.forName("com.mysql.jdbc.Driver").newInstance(); 请参阅JDBC连接 – Class.forName与Class.forName()。newInstance? 它显示了如何使用Class.forName("com.mysql.jdbc.Driver")因为它不需要自己启动它

参考文献:

这应该有用,我想……

 ResultSet results = st.executeQuery(sql); if(results.next()) { //there is a row int id = results.getInt(1); //ID if its 1st column String str1 = results.getString(2); ... } 

Easy Java方法从MySQL表中获取数据:

 /* * CREDIT : WWW.CODENIRVANA.IN */ String Data(String query){ String get=null; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = (Connection)DriverManager.getConnection ("jdbc:mysql://localhost:3306/mysql","root","password"); Statement stmt = (Statement) con.createStatement(); ResultSet rs=stmt.executeQuery(query); if (rs.next()) { get = rs.getString(""); } } catch(Exception e){ JOptionPane.showMessageDialog (this, e.getMessage()); } return get; }