JDBC添加表字段

JDBC添加表字段

老师,您好!为什么我通过JDBC给mysql表添加create_time字段会报错?是不是JDBC只能对表中的值操作,不能对字段进行操作。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DButile {

    /**
     * 建立mysql数据库连接
     * @return conn
     * @throws SQLException
     */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {

        Class.forName("com.mysql.cj.jdbc.Driver");

        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/jdbcstu?useSSL=false&" +
                "useUnicode=true&characterEncoding=UTF-8&" +
                "serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";

        return conn = DriverManager.getConnection(url, "root", "ad123456");
    }

    /**
     * 关闭数据库连接
     * @param conn
     * @throws SQLException
     */
    public static void close(Connection conn) {
        try {
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * 向goods表添加一个Date类型的字段:create_time
 */
public class InsertGoods {

    public static void main(String[] args) {
        String sql = "ALTER TABLE goods ADD ? DATETIME";

        Connection conn = null;
        try {
            conn = DButile.getConnection();
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, "create_time");
            pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DButile.close(conn);
        }
    }
}

https://img1.sycdn.imooc.com//climg/637dd6c2097d95ec25150509.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好, 

1、setXxx() 方法是用来设置参数的,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值,在这里设置列名是不可以的,所以建议同学直接更改为如下这样:

https://img1.sycdn.imooc.com//climg/637de44b0997385b06560268.jpg

2、类名由多个单词组成时,每个单词首字母大写,如:DButile应更改为DBUtile

祝学习愉快~


  • hor5 提问者 #1

    嗯嗯,刚试了确实可以,但是添加的create_time字段在goods表第一列了,老师有没有方法把添加的字段放在最后一列。

    https://img1.sycdn.imooc.com//climg/637deb1d09d4e8cc12310398.jpg

    2022-11-23 17:42:56
  • 好帮手慕小脸 回复 提问者 hor5 #2

    同学你好,上述命令就是将其添加到最后面,建议同学确认一下是否手动移动位置,如果没有,可使用如下命令在表的指定列后添加

    alter table t_emp add 要添加列 字段类型 after 指定列;

    https://img1.sycdn.imooc.com//climg/637df09409f3446a08590434.jpg

    https://img1.sycdn.imooc.com//climg/637df0b60938914c05040109.jpg

    祝学习愉快~

    2022-11-23 18:06:52
  • hor5 提问者 回复 好帮手慕小脸 #3

    我删除了create_time字段重新运行添加的确在最后面,可能是手动移动位置了,非常感谢老师的解答!另外,老师提到的DButile类名写法,因为之前项目学习已经写过同名的类,所以有意这样写是为了以示区分。

    2022-11-23 21:03:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师