Java-从MySQL数据库获取数据

Java-从MySQL数据库获取数据,java,mysql,sql,database,jsp,Java,Mysql,Sql,Database,Jsp,我已经连接到一个MySQL数据库,它包含四个字段(第一个字段是ID,后面的每个字段都包含varchar字符串) 我试图获取数据库的最后一行并检索字段的内容,以便将它们设置为变量(一个int和三个字符串),并在以后使用它们 到目前为止,我只有最低限度的连接,我该从这里走到哪里?正如您所看到的,我试图编写一个SQL语句来获取最后一行,但从那以后就出了问题,我不知道如何将其拆分为单独的字段 Class.forName("com.mysql.jdbc.Driver").newInstance(); Co

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

这样做可以:

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()的使用查看其中显示了如何使用
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);
       ...
      }
      
      给你:

      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.getInt
      rs.getString
      中,您可以从
      1
      开始传递
      列id
      ,但我更喜欢传递
      列名称
      ,因为它的信息量更大,因为您不必查看数据库
      ,而
      索引
      就是

      更新:
      rs.next

      布尔下一步() 抛出SQLException

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

      当对下一个方法的调用返回false时,将定位光标 在最后一排之后。对ResultSet方法的任何调用 需要当前行将导致引发SQLException。如果 结果集类型仅为“向前”类型,由供应商指定 他们的JDBC驱动程序实现将返回false还是抛出 后续调用next时发生SQLException

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

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


      从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;
      }
      

      以下是我刚才所做的:

      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,
      );
      
      • 首先,下载MySQL连接器jar文件,这是今天最新的jar文件

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

      • 然后从DriverManager类创建一个新的连接对象,以便可以使用此连接对象执行查询

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

      • 使用resultSet从数据库表中获取基于列名的数据

      示例代码如下:

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

      为什么results.next()让我们知道有一行?它移动到下一行(最初在第一行之前),如果没有,它返回false,因此失败;否则,它将返回true并继续。还有一个