public <T> T getRelatedObj(String id, String tableName,String column,Class<T> t) throws SQLException { String sql = "select * from cls_"+tableName+" where "+column+"=?"; return qr.query(sql, new BeanHandler<T>(t), id); }
时间: 2024-04-14 08:28:42 浏览: 19
这个方法是一个通用的方法,根据指定的表名、列名和对象类型来查询相关的对象。它接受个参数:id(用于查询的条件值)、tableName(表名)、column(列名)和t(对象类型)。方法中使用了一个占位符来构建查询语句,并通过BeanHandler将查询结果映射为指定类型的对象。最后,使用QueryRunner的query方法执行查询并返回查询结果。如果发生SQLException异常,方法会抛出该异常。
相关问题
java实现sql生成器 可生成ddl dml dql
Java中可以使用数据库连接池来连接数据库进行操作,然后通过拼接SQL语句的方式实现SQL生成器。下面是一个简单的示例:
1. 定义一个数据库连接池的类,用于获取数据库连接:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBUtil {
private static DataSource ds = new ComboPooledDataSource();
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
```
2. 定义一个SQL生成器类,用于生成DDL、DML和DQL语句:
```java
import java.util.ArrayList;
import java.util.List;
public class SQLBuilder {
private String tableName;
private List<String> columns = new ArrayList<>();
private List<String> values = new ArrayList<>();
private List<String> conditions = new ArrayList<>();
public SQLBuilder(String tableName) {
this.tableName = tableName;
}
public SQLBuilder addColumn(String column) {
columns.add(column);
return this;
}
public SQLBuilder addValue(String value) {
values.add(value);
return this;
}
public SQLBuilder addCondition(String condition) {
conditions.add(condition);
return this;
}
public String createDDL() {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE ").append(tableName).append("(");
for (String column : columns) {
sb.append(column).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(")");
return sb.toString();
}
public String createDML() {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(tableName).append(" (");
for (String column : columns) {
sb.append(column).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(") VALUES (");
for (String value : values) {
sb.append(value).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(")");
return sb.toString();
}
public String createDQL() {
StringBuilder sb = new StringBuilder();
sb.append("SELECT * FROM ").append(tableName);
if (!conditions.isEmpty()) {
sb.append(" WHERE ");
for (String condition : conditions) {
sb.append(condition).append(" AND ");
}
sb.delete(sb.length() - 5, sb.length());
}
return sb.toString();
}
}
```
3. 使用SQL生成器生成SQL语句:
```java
public class Main {
public static void main(String[] args) {
SQLBuilder builder = new SQLBuilder("user");
String ddl = builder.addColumn("id INT PRIMARY KEY AUTO_INCREMENT")
.addColumn("name VARCHAR(50)")
.addColumn("age INT")
.createDDL();
System.out.println(ddl);
String dml = builder.addValue("1")
.addValue("'Tom'")
.addValue("20")
.createDML();
System.out.println(dml);
String dql = builder.addCondition("age > 18")
.createDQL();
System.out.println(dql);
}
}
```
上述代码生成的SQL语句分别为:
```sql
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT)
INSERT INTO user (id,name,age) VALUES (1,'Tom',20)
SELECT * FROM user WHERE age > 18
```
当然,这只是一个简单的示例,实际应用中可能需要更复杂的SQL操作和更灵活的生成方式。
给出一个完整的项目代码,用servlet和jsp实现在网页中输入数据库,账户密码,库名,表名列名,可以在网页中显示相关数据,点击更新可以对数据库中的数据进行相应的修改,可以在网页和数据库中都看到。
很抱歉,我并不是一个可以执行代码的程序,我只能给你提供一些思路和参考代码。
首先,你需要在 web.xml 中配置一个 servlet,用于处理用户提交的请求。具体配置如下:
```xml
<servlet>
<servlet-name>DatabaseServlet</servlet-name>
<servlet-class>com.example.DatabaseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DatabaseServlet</servlet-name>
<url-pattern>/database</url-pattern>
</servlet-mapping>
```
然后,你需要编写一个 DatabaseServlet 类,处理用户提交的请求。具体代码如下:
```java
package com.example;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DatabaseServlet extends HttpServlet {
// 数据库连接信息
private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "password";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取用户请求参数
String dbName = req.getParameter("dbName");
String tableName = req.getParameter("tableName");
String columnName = req.getParameter("columnName");
// 连接数据库
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL + dbName, DB_USERNAME, DB_PASSWORD);
stmt = conn.createStatement();
// 查询数据库
rs = stmt.executeQuery("SELECT " + columnName + " FROM " + tableName);
// 构造 HTML 响应
StringBuilder sb = new StringBuilder();
sb.append("<html><body>");
sb.append("<table>");
while (rs.next()) {
sb.append("<tr>");
sb.append("<td>" + rs.getString(columnName) + "</td>");
sb.append("</tr>");
}
sb.append("</table>");
sb.append("</body></html>");
// 发送响应
resp.getWriter().write(sb.toString());
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取用户请求参数
String dbName = req.getParameter("dbName");
String tableName = req.getParameter("tableName");
String columnName = req.getParameter("columnName");
String id = req.getParameter("id");
String newValue = req.getParameter("newValue");
// 更新数据库
Connection conn = null;
Statement stmt = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL + dbName, DB_USERNAME, DB_PASSWORD);
stmt = conn.createStatement();
stmt.executeUpdate(
"UPDATE " + tableName + " SET " + columnName + "='" + newValue + "' WHERE id=" + id);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 重定向到 GET 请求
resp.sendRedirect(req.getRequestURI() + "?dbName=" + dbName + "&tableName=" + tableName
+ "&columnName=" + columnName);
}
}
```
接下来,你需要编写一个 JSP 页面,用于展示用户查询的结果和更新数据库。具体代码如下:
```html
<html>
<body>
<form method="get" action="/database">
<label>数据库:</label>
<input type="text" name="dbName">
<br>
<label>表名:</label>
<input type="text" name="tableName">
<br>
<label>列名:</label>
<input type="text" name="columnName">
<br>
<input type="submit" value="查询">
</form>
<hr>
<% if (request.getParameter("dbName") != null && request.getParameter("tableName") != null
&& request.getParameter("columnName") != null) { %>
<table>
<thead>
<tr>
<th>ID</th>
<th><%= request.getParameter("columnName") %></th>
<th>操作</th>
</tr>
</thead>
<tbody>
<%
// 连接数据库
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL + request.getParameter("dbName"),
DB_USERNAME, DB_PASSWORD);
stmt = conn.createStatement();
// 查询数据库
rs = stmt.executeQuery(
"SELECT id, " + request.getParameter("columnName") + " FROM "
+ request.getParameter("tableName"));
// 构造 HTML 响应
while (rs.next()) { %>
<tr>
<td><%= rs.getInt("id") %></td>
<td><%= rs.getString(request.getParameter("columnName")) %></td>
<td>
<form method="post" action="/database">
<input type="hidden" name="dbName" value="<%= request.getParameter("dbName") %>">
<input type="hidden" name="tableName" value="<%= request.getParameter("tableName") %>">
<input type="hidden" name="columnName" value="<%= request.getParameter("columnName") %>">
<input type="hidden" name="id" value="<%= rs.getInt("id") %>">
<input type="text" name="newValue" value="<%= rs.getString(request.getParameter("columnName")) %>">
<input type="submit" value="更新">
</form>
</td>
</tr>
<% }
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} %>
</tbody>
</table>
<% } %>
</body>
</html>
```
最后,你需要将上述代码放到一个 Web 项目中,然后运行该项目,访问 http://localhost:8080/your-project-name/database 即可使用该功能。注意,你需要将代码中的数据库连接信息替换为你自己的连接信息,同时需要在你的数据库中创建相应的表格和数据。