【问题标题】:Java - Getting Data from MySQL databaseJava - 从 MySQL 数据库中获取数据
【发布时间】:2012-08-16 00:01:53
【问题描述】:

我已经连接到一个 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();

【问题讨论】:

    标签: java mysql sql database jsp


    【解决方案1】:

    给你:

    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

    布尔下一个() 抛出 SQLException

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

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

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

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

    reference

    【讨论】:

      【解决方案2】:

      这样的事情会做:

      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 迭代结果:

      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 connection- Class.forName vs Class.forName().newInstance?,它显示了您可以如何使用Class.forName("com.mysql.jdbc.Driver"),因为它不需要自己启动

      参考资料:

      【讨论】:

        【解决方案3】:

        我认为这应该可行……

        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);
         ...
        }
        

        【讨论】:

        • 为什么 results.next() 让我们知道有一行?
        • 它移动到下一行可用(最初它在第一行之前),如果没有它返回false,所以它失败;否则返回 true 并继续。
        • 还有一个look
        【解决方案4】:

        从 MySQL 表中获取数据的简单 Java 方法:

        /*
         * 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;
        }
        

        【讨论】:

          【解决方案5】:

          这是我现在所做的:

          import java.sql.*;
          import java.util.logging.Level;
          import java.util.logging.Logger;
          
          import com.sun.javafx.runtime.VersionInfo;  
          
          public class ConnectToMySql {
          public static ConnectBean dataBean = new ConnectBean();
          
          public static void main(String args[]) {
              getData();
              }
          
          
          
          public static void getData () {
          
              try {
                  Class.forName("com.mysql.jdbc.Driver");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mynewpage", 
           "root", "root");
                  
           // here mynewpage is database name, root is username and password
              
          Statement stmt = con.createStatement();
                  System.out.println("stmt  " + stmt);
                  ResultSet rs = stmt.executeQuery("select * from carsData");
                  System.out.println("rs  " + rs);
                  int count = 1;
                  while (rs.next()) {
                      String vehicleType = rs.getString("VHCL_TYPE");
                      System.out.println(count  +": " + vehicleType);
                      count++;
          
                  }
          
                  con.close();
              } catch (Exception e) {
                  Logger lgr = Logger.getLogger(VersionInfo.class.getName());
                  lgr.log(Level.SEVERE, e.getMessage(), e);
          
                  System.out.println(e.getMessage());
              }
              
              
          }
          
          }
          

          上面的代码将为您提供您拥有的表格的第一列。

          这是您可能需要在 MySQL 数据库中创建的表

          CREATE TABLE
          carsData
          (
              VHCL_TYPE CHARACTER(10) NOT NULL,
          );
          

          【讨论】:

            【解决方案6】:
            • 首先,下载MySQL连接器jar文件,这是今天最新的jar文件 [mysql-connector-java-8.0.21]

            • 将 Jar 文件添加到您的工作区 [构建路径]。

            • 然后从 DriverManager 类创建一个新的 Connection 对象,这样您就可以使用这个 Connection 对象来执行查询。

            • 为您的连接定义数据库名称、用户名和密码。

            • 使用结果集从数据库表中获取基于列名的数据。

            示例代码在这里:

            public class JdbcMySQLExample{
            
            public static void main(String[] args) {
            
                String url = "jdbc:mysql://localhost:3306/YOUR_DB_NAME?useSSL=false";
                String user = "root";
                String password = "root";
                
                String query = "SELECT * from YOUR_TABLE_NAME";
            
                try (Connection con = DriverManager.getConnection(url, user, password);
                    Statement st = con.createStatement();
                    ResultSet rs = st.executeQuery(query)) {
            
                    if (rs.next()) {
                        
                        System.out.println(rs.getString(1));
                    }
            
                } catch (SQLException ex) {
                      System.out.println(ex);
                   
                } 
            }
            

            【讨论】:

              猜你喜欢
              • 2017-12-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多