Java - 从MySQL数据库获取数据

时间:2012-08-20 16:18:22

标签: java mysql sql database jsp

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

6 个答案:

答案 0 :(得分:13)

你走了:

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中,您可以从column_id开始传递1,但我更愿意传递column_name,因为它不会提供更多信息必须查看数据库table indexcolumn

更新: rs.next

  

boolean next()                抛出SQLException

     

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

     

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

     

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

     

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

reference

答案 1 :(得分:3)

这样的事情可以做到:

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")作为不必自行启动

<强>参考文献:

答案 2 :(得分:1)

这应该有用,我想......

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

答案 3 :(得分:1)

这是我现在所做的:

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

答案 4 :(得分:1)

  • 首先,下载MySQL连接器jar文件,这是今天的最新jar文件 [mysql-connector-java-8.0.21]

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

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

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

  • 使用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);
       
    } 
}

答案 5 :(得分:0)

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