Java - 从 MySQL 数据库中获取数据

Posted

技术标签:

【中文标题】Java - 从 MySQL 数据库中获取数据【英文标题】:Java - Getting Data from MySQL database 【发布时间】: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();

【问题讨论】:

【参考方案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

还有很多其他很棒的教程,比如这些,仅举几例:

http://www.vogella.com/articles/MySQLJava/article.html http://www.java-samples.com/showtutorial.php?tutorialid=9

至于您对Class.forName("com.mysql.jdbc.Driver").newInstance(); 的使用,请参阅JDBC connection- Class.forName vs Class.forName().newInstance?,它显示了您可以如何使用Class.forName("com.mysql.jdbc.Driver"),因为它不需要自己启动

参考资料:

http://zetcode.com/databases/mysqljavatutorial/

【讨论】:

【参考方案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);
       
     

【讨论】:

以上是关于Java - 从 MySQL 数据库中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从 SAP 获取数据时 MySQL 服务器版本中的 SQL 语法错误

java 怎样查询MYSQL数据库中的数据;根据id字段查询,获取id 对应的一行数据,并显示 在标签上。

从 SQL 获取数据并将其插入到 Java 文本字段中

无法使用 thymeleaf 从 mysql 数据库加载 chrome 中的数据,但在控制台中获取查询

java获取当前时间 传递mysql中

从 JSpinner 获取日期并放入具有 DATE 格式的 MySQL 数据库列