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.getInt
或rs.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 对应的一行数据,并显示 在标签上。