Java-从MySQL数据库获取数据
我已经连接到一个MySQL数据库,它包含四个字段(第一个字段是ID,后面的每个字段都包含varchar字符串) 我试图获取数据库的最后一行并检索字段的内容,以便将它们设置为变量(一个int和三个字符串),并在以后使用它们 到目前为止,我只有最低限度的连接,我该从这里走到哪里?正如您所看到的,我试图编写一个SQL语句来获取最后一行,但从那以后就出了问题,我不知道如何将其拆分为单独的字段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
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并继续。还有一个