我已经连接到一个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();
答案 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.getInt
或rs.getString
中,您可以从column_id
开始传递1
,但我更愿意传递column_name
,因为它不会提供更多信息必须查看数据库table
index
是column
。
更新: rs.next
boolean next() 抛出SQLException
将光标从当前位置向前移动一行。一个 ResultSet游标最初位于第一行之前;该 首先调用方法接下来使第一行成为当前行;该 第二次调用使第二行成为当前行,依此类推。
当对next方法的调用返回false时,将定位光标 在最后一排之后。任何ResultSet方法的调用 需要当前行将导致抛出SQLException。如果 结果集类型为TYPE_FORWARD_ONLY,它是供应商指定的 他们的JDBC驱动程序实现是返回false还是抛出 对后续调用的SQLException。
如果当前行打开了输入流,则调用该方法 接下来将隐含地关闭它。 ResultSet对象的警告链是 读取新行时清除。
返回: 如果新的当前行有效,则为true;如果没有更多行,则返回false抛出: SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法
答案 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;
}