java 在mysql内创建一个数据表,表名是参数,该怎么创建?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 在mysql内创建一个数据表,表名是参数,该怎么创建?相关的知识,希望对你有一定的参考价值。
Statement stmt2=conn.createStatement();
String sql2="CREATE TABLE"+p0+"("+"friendlist VARCHAR2(20)"+")";
stmt2.executeUpdate(sql2);
p0是String型的参数还是有错,怎么回事啊
sql="INSERT INTO rtNews(author,title,create_time,content,isdelete) VALUES ('"+username+"','"+newsTitle+"','"+ddte+"','"+newsContent+"',1)
这是个插入语句,创建的,我就不写了暂时没有现成的那个括号中的值”+ 变量+“就是变量
mysql[1]
是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,
关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL
语言是用于访问数据库的最常用标准化语言。MySQL
软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 php 和 Apache 可组成良好的开发环境。 参考技术A 把表名当成参数拼接到建表sql语句里 再使用executeUpdate向数据库中创建表格 参考技术B String createTable="Create table `"+tableName+"`........."追问
Statement stmt2=conn.createStatement();
String sql2="CREATE TABLE"+p0+"("+"friendlist VARCHAR2(20)"+")";
stmt2.executeUpdate(sql2);
p0是String型的参数还是有错,怎么回事啊
你输出sql2,就可以发现TABLE后面没有空格,增加一个空格,输出的sql2可以放到mysql中去测试一下,就会发现问题
本回答被提问者采纳 参考技术C public static User select(String tableName)Connection conn = 链接
Statement stmt = conn.createStatementI();
String sql = "CREATE TABLE "+tableName+"( "
+" NODE_NAME_S VARCHAR2(20), "
+ 其他字段
+")";
stmt.execute(sql)
表名是啥?
【中文标题】表名是啥?【英文标题】:What is the table name?表名是什么? 【发布时间】:2018-10-02 04:37:23 【问题描述】:我正在使用 H2 数据库创建一个 Spring Boot 应用程序。我经常收到以下错误:
未找到表“THINGS_TO_DO”; SQL 语句: 插入 things_to_do (id, name, verify) 值 (1, 'TestUser1', 1) [42102-197]
而且,我觉得这是合乎逻辑的,因为我不知道在应用程序中在哪里传递这个表名。另外,表名应该是什么 - 表必须有一些特定的名称吗?
我的 ThingsToDo.java 如下:
package me.hiboy.springboot.microservice.example.todo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="things_to_do")
public class ThingsToDo
@Id
private Long id;
@Column(name="name")
private String name;
@Column(name="verified")
private int verificationStatus;
private String task;
public ThingsToDo()
public ThingsToDo(Long id, String name, int verificationStatus, String task)
super();
this.id=id;
this.name=name;
this.verificationStatus=verificationStatus;
this.task=task;
public Long getId()
return id;
public String getName()
return name;
public int getVerificationStatus()
return verificationStatus;
public String getTask()
return task;
控制器ThingsToDoController.java如下:
package me.hiboy.springboot.microservice.example.todo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ThingsToDoController
@Autowired
ThingsToDoRepository repository;
@GetMapping("/")
public String index()
return "Hello from the ToDo Controller\n";
@GetMapping("/todo/name")
public ThingsToDo getThingsToDo(@PathVariable String name)
ThingsToDo thingToDo=repository.findByName(name);
return thingToDo;
存储库 ThingsToDoRepository 是:
package me.hiboy.springboot.microservice.example.todo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ThingsToDoRepository extends JpaRepository<ThingsToDo, Long>
ThingsToDo findByName(String name);
Application.properties 是:
spring.application.name=todo-service
server.port=8080
spring.jpa.show-sql=true
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.initialize=true
data.sql 是:
insert into things_to_do (id, name, verified) values (1, 'TestUser1', 1);
insert into things_to_do (id, name, verified) values (2, 'TestUser2', 0);
我不认为pom.xml
是必需的 - 如果是的话,请让我知道,我也会发布。谢谢。
编辑: 带有 main() 方法的方法在这里:
package me.hiboy.springboot.microservice.example.todo.springbootmicroservicetodoservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootMicroserviceTodoServiceApplication
public static void main(String[] args)
SpringApplication.run(SpringBootMicroserviceTodoServiceApplication.class, args);
编辑:到目前为止给出的所有答案都没有帮助。
【问题讨论】:
【参考方案1】:按照包名作为 如果您的主类在 com.example 包中 那么你的应用程序中的所有包都将遵循这个包 至于新实体,包裹将是 com.example.entity
【讨论】:
对不起,你是说我目前的目录结构不对? 我说要从你的最后验证一次,因为你没有发布你的主要课程我猜这可能是原因 正如我所见,你没有遵循结构 好吧,this link 说不需要结构。那么,如果我只是将主类文件移到 com.example 之外,我会好吗? 对不起,这根本没有帮助!我遵循教程中给出的相同结构!!【参考方案2】:您需要使用正确的包名称,因为我可以看到您的应用程序类和其他类不遵循包命名约定。
另外,如果我只想插入简单的测试数据,我通常会实现 ApplicationRunner
。此接口的实现在应用程序启动时运行,并且可以使用例如autowired repository
插入一些测试数据。
您的实现将如下所示:
@Component
public class DataLoader implements ApplicationRunner
@Autowired
ThingsToDoRepository repository;
@Autowired
public DataLoader(ThingsToDoRepository repository)
this.repository = repository;
public void run(ApplicationArguments args)
repository.save(new ThingsToDo(1, 'TestUser1', 1));
repository.save(new ThingsToDo(2, 'TestUser2', 0));
【讨论】:
【参考方案3】:您收到此错误是因为没有具有该名称的表。
您可以尝试将spring.jpa.hibernate.ddl-auto=create-drop
添加到您的.properties
文件中。然后每次运行您的应用程序时,它都应该使用您的实体生成该表。
或者您需要手动创建一个名称为things_to_do
的表,然后当您运行您的应用程序时它应该可以工作。为此,您需要添加
/src/main/resources/schema.sql
create table things_to_do
(
id integer not null,
/*all the rest columns */
);
另一件事是,Spring 要查找您的组件(如存储库或服务等),它会扫描包。并且自动配置扫描你的主类所在的包和所有嵌套的包。
所以如果你不想手动设置你的类所在的位置,你需要遵循这个结构!
例子:
my.main.package // here is your main class
my.main.package.entities // here are your entities
my.main.package.repositories // your repos
my.main.package.services // services
这只是一个示例,并不意味着您应该提供相同的名称,只需遵循约定即可。希望清楚我所说的包结构是什么意思:)
【讨论】:
但是我使用的是 H2 数据库。那么,表不是自动创建的吗?我的理解不正确吗?另外,不幸的是,我仍然遇到同样的错误。 (无论如何,我以前尝试过)。 我猜你也需要提供spring boot主类代码。具有主要方法的一种。我猜你缺少一些配置。然后我可以更新我的答案。 我会检查的。我也更新了我的答案,您可以尝试添加schema.sql
并检查它是否有任何不同。
知道了。谢谢。
嗯,我遵循的结构与教程中给出的完全相同。【参考方案4】:
通常,您会通过实体名称而不是实际的表名称来引用您的表。在这种情况下,它将是 ThingsToDo。
但在这种特殊情况下,您通过给您的实体另一个名称来覆盖它:
@Entity
@Table(name="things_to_do")
public class ThingsToDo
这就是为什么您应该在查询中使用“things_to_do”,或者删除 name 语句。
【讨论】:
以上是关于java 在mysql内创建一个数据表,表名是参数,该怎么创建?的主要内容,如果未能解决你的问题,请参考以下文章