mysql中select语句,查询int类型时除100,转为BigDecimal怎么写
时间: 2024-04-05 10:33:38 浏览: 196
你可以使用MySQL的内置函数`CONVERT`将`int`类型的值除以100并转换为`BigDecimal`类型。以下是一个示例查询语句:
```sql
SELECT CONVERT(your_column_name / 100, DECIMAL(10,2)) AS result FROM your_table_name;
```
在上述查询中,将`your_column_name`替换为你要查询的`int`类型列的名称,将`your_table_name`替换为你要查询的表的名称。`DECIMAL(10,2)`表示结果将被转换为`BigDecimal`类型,并保留两位小数。你可以根据需求调整这些参数。
相关问题
通过Java控制台开发一个银行管理系统,使用MySQL作为后台数据,实现银行管理员工功能和顾客功能。具体要求如下顾客功能:登录、存款、取款、转账、修改密码、退出代码
好的,这是一个比较复杂的问题,需要一定的时间和代码量。我会尽力回答你的问题,但是由于篇幅限制,可能无法写出完整的代码,只能提供思路和代码片段,希望对你有所帮助。
首先,我们需要设计数据库表结构,包括顾客表和管理员表,以及和它们相关联的其他表,比如存款、取款、转账、密码修改等。这里只给出一个简单的顾客表结构:
```sql
CREATE TABLE customer (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(50) NOT NULL,
balance DECIMAL(10, 2) DEFAULT 0.00,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
然后,我们需要编写Java代码连接数据库,进行数据的增删改查。这里使用JDBC实现。首先,我们需要引入MySQL驱动:
```java
import java.sql.*;
public class BankSystem {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("无法加载驱动程序");
e.printStackTrace();
}
// 连接数据库
String url = "jdbc:mysql://localhost:3306/bank_system";
String user = "root";
String password = "123456";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
// 执行SQL语句
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM customer");
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" +
rs.getString("username") + "\t" +
rs.getString("password") + "\t" +
rs.getBigDecimal("balance") + "\t" +
rs.getTimestamp("created_at"));
}
rs.close();
stmt.close();
} catch (SQLException e) {
System.err.println("无法连接数据库");
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
```
上述代码中,我们首先加载了MySQL驱动,然后连接了数据库,并执行了一个简单的SELECT语句,将结果输出到控制台上。
接下来,我们需要实现顾客功能。首先是登录功能,这里我们可以使用PreparedStatement预编译SQL语句,防止SQL注入攻击:
```java
public static boolean login(String username, String password) {
String sql = "SELECT * FROM customer WHERE username = ? AND password = ?";
try (Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
```
上述代码中,我们首先获取数据库连接,然后使用PreparedStatement预编译SQL语句,并将参数绑定到占位符上,最后执行查询并返回结果。
接下来是存款功能,这里我们可以使用事务(Transaction)保证数据的一致性:
```java
public static boolean deposit(String username, BigDecimal amount) {
String sql1 = "UPDATE customer SET balance = balance + ? WHERE username = ?";
String sql2 = "INSERT INTO deposit (username, amount) VALUES (?, ?)";
try (Connection conn = getConnection();
PreparedStatement stmt1 = conn.prepareStatement(sql1);
PreparedStatement stmt2 = conn.prepareStatement(sql2)) {
conn.setAutoCommit(false);
stmt1.setBigDecimal(1, amount);
stmt1.setString(2, username);
int rows1 = stmt1.executeUpdate();
if (rows1 != 1) {
conn.rollback();
return false;
}
stmt2.setString(1, username);
stmt2.setBigDecimal(2, amount);
int rows2 = stmt2.executeUpdate();
if (rows2 != 1) {
conn.rollback();
return false;
}
conn.commit();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
```
上述代码中,我们首先获取数据库连接,并使用setAutoCommit(false)关闭自动提交事务。然后,我们使用两个PreparedStatement分别执行存款操作和记录存款记录操作。如果两个操作都执行成功,则提交事务,否则回滚事务。
接下来是取款功能,和存款功能类似,也需要使用事务:
```java
public static boolean withdraw(String username, BigDecimal amount) {
String sql1 = "UPDATE customer SET balance = balance - ? WHERE username = ? AND balance >= ?";
String sql2 = "INSERT INTO withdraw (username, amount) VALUES (?, ?)";
try (Connection conn = getConnection();
PreparedStatement stmt1 = conn.prepareStatement(sql1);
PreparedStatement stmt2 = conn.prepareStatement(sql2)) {
conn.setAutoCommit(false);
stmt1.setBigDecimal(1, amount);
stmt1.setString(2, username);
stmt1.setBigDecimal(3, amount);
int rows1 = stmt1.executeUpdate();
if (rows1 != 1) {
conn.rollback();
return false;
}
stmt2.setString(1, username);
stmt2.setBigDecimal(2, amount);
int rows2 = stmt2.executeUpdate();
if (rows2 != 1) {
conn.rollback();
return false;
}
conn.commit();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
```
上述代码中,我们首先执行取款操作,并检查余额是否充足。如果余额不足,则回滚事务。否则,我们执行记录取款记录操作,并提交事务。
接下来是转账功能,也需要使用事务:
```java
public static boolean transfer(String from, String to, BigDecimal amount) {
String sql1 = "UPDATE customer SET balance = balance - ? WHERE username = ? AND balance >= ?";
String sql2 = "UPDATE customer SET balance = balance + ? WHERE username = ?";
String sql3 = "INSERT INTO transfer (from_customer, to_customer, amount) VALUES (?, ?, ?)";
try (Connection conn = getConnection();
PreparedStatement stmt1 = conn.prepareStatement(sql1);
PreparedStatement stmt2 = conn.prepareStatement(sql2);
PreparedStatement stmt3 = conn.prepareStatement(sql3)) {
conn.setAutoCommit(false);
stmt1.setBigDecimal(1, amount);
stmt1.setString(2, from);
stmt1.setBigDecimal(3, amount);
int rows1 = stmt1.executeUpdate();
if (rows1 != 1) {
conn.rollback();
return false;
}
stmt2.setBigDecimal(1, amount);
stmt2.setString(2, to);
int rows2 = stmt2.executeUpdate();
if (rows2 != 1) {
conn.rollback();
return false;
}
stmt3.setString(1, from);
stmt3.setString(2, to);
stmt3.setBigDecimal(3, amount);
int rows3 = stmt3.executeUpdate();
if (rows3 != 1) {
conn.rollback();
return false;
}
conn.commit();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
```
上述代码中,我们首先执行转出操作,并检查余额是否充足。如果余额不足,则回滚事务。否则,我们执行转入操作,并记录转账记录,并提交事务。
接下来是修改密码功能:
```java
public static boolean changePassword(String username, String oldPassword, String newPassword) {
String sql = "UPDATE customer SET password = ? WHERE username = ? AND password = ?";
try (Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, newPassword);
stmt.setString(2, username);
stmt.setString(3, oldPassword);
int rows = stmt.executeUpdate();
if (rows == 1) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
```
上述代码中,我们首先执行修改密码操作,并检查旧密码是否正确。如果旧密码不正确,则修改失败,否则修改成功。
最后是退出功能,这里我们可以使用System.exit(0)来结束程序:
```java
public static void exit() {
System.exit(0);
}
```
上述代码中,我们直接调用System.exit(0)来结束程序。
整个银行管理系统的代码较长,这里只展示了各个功能的代码片段,具体实现还需要根据具体的需求进行完善。
javaweb 在数据库中建立一张表:T- BOOK,包含图书ID,图书名称,图书价格。 编写图书模糊查询界面,录入图书名称的模糊资料,界面下方显示图书信息,要求交给servlet完成。
好的,我会为您详细解答。
首先,在数据库中创建 T_BOOK 表,包含图书ID,图书名称和图书价格三个字段,可以使用以下 SQL 语句:
```sql
CREATE TABLE T_BOOK (
id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2)
);
```
接下来,您可以编写一个简单的 HTML 页面,用于输入图书名称的模糊查询条件,并将查询结果显示在页面上。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书查询</title>
</head>
<body>
<form action="BookServlet" method="post">
<label for="name">图书名称:</label>
<input type="text" id="name" name="name">
<button type="submit">查询</button>
</form>
<hr>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<%-- 查询结果展示在这里 --%>
</tbody>
</table>
</body>
</html>
```
注意,这里的表单提交方式为 POST,提交的目标为名为 BookServlet 的 Servlet。
接下来,编写 Servlet,用于处理表单提交并查询数据库。以下是一个简单的示例:
```java
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/BookServlet")
public class BookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
List<Book> books = new ArrayList<>();
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
String sql = "SELECT id, name, price FROM T_BOOK WHERE name LIKE ?";
ps = con.prepareStatement(sql);
ps.setString(1, "%" + name + "%");
rs = ps.executeQuery();
while (rs.next()) {
Book book = new Book();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setPrice(rs.getBigDecimal("price"));
books.add(book);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
request.setAttribute("books", books);
request.getRequestDispatcher("/book.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public static class Book {
private int id;
private String name;
private BigDecimal price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
}
```
这个 Servlet 主要做了以下几件事情:
1. 从请求参数中获取图书名称的模糊查询条件;
2. 查询数据库,并将查询结果封装成 Book 对象;
3. 将查询结果保存到请求属性中,并转发到 book.jsp 页面进行展示。
最后,编写 book.jsp 页面,用于展示查询结果:
```html
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.example.BookServlet.Book" %>
<html>
<head>
<meta charset="UTF-8">
<title>图书列表</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<c:forEach items="${books}" var="book">
<tr>
<td>${book.id}</td>
<td>${book.name}</td>
<td>${book.price}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
```
在这个页面中,我们使用了 JSTL 标签库来遍历查询结果并展示在表格中。
以上就是一个简单的图书模糊查询界面的实现过程。希望可以帮到你!
阅读全文