装myeclipse吧,数据库视图里面有,直接用myeclipse连接数据库,找到表,右键,然后选hibernate reverse engineering就可以进自动生成映射的界面了。当然eclipse里你也可以找一下。
获取自动生成的键值,int id primary key auto_increment;
ClassforName("commysqljdbcDriver");
Connection conn = DriverManager
getConnection("jdbc:mysql://localhost/BBSuser=root&password=root"); //连接数据库
connsetAutoCommit(false); //不自动提交
String sql = "insert into article values (null,0,,,,now(),0)";
PreparedStatement pstat = connprepareStatement(sql,StatementRETURN_GENERATED_KEYS);
//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句
//(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志
//它是 StatementRETURN_GENERATED_KEYS 或 StatementNO_GENERATED_KEYS 之一
Statement stat = conncreateStatement();
pstatsetInt(1, -1);
pstatsetString(2,title);
pstatsetString(3,content);
pstatexecuteUpdate();
ResultSet rsKey = pstatgetGeneratedKeys(); //ResultSet 指示键值
rsKeynext();
int key = rsKeygetInt(1); //得到第一个键值
rsKeyclose();
statexecuteUpdate("update article set rootid = " + key + " where id = " + key);
conncommit();
connsetAutoCommit(true); //设回自动提交
pstatclose();
connclose();
应用环境:表中有一个冗余字段,刚插入时要求该冗余字段的值和第一个字段的值相等,第一个字段是自动递增的,所以先向冗余字段插入一个-1(不知道为什么写-1,先这样记着),然后再Statement,update一下就可以了。
javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK60里面带的这个Derby的版本是 10217,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 40规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行
1、本身没有 *** 作界面,可以用第三方工具来管理(也就是你说的 *** 作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。
2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。
3、下面是个使用derby的简单例子:
首先导入JAR包:derbyjar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到
然后就要创建数据库了:
代码
private Connection getConnection() throws SQLException {
Connection connection = DriverManager
getConnection("jdbc:derby:userDB;create=true;user=test;password=test");
connectionsetAutoCommit(false);
return connection;
}
其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test;密码password=test连接数据库
有了数据库,接下来该建表了:
代码
private void createTable(Connection connection) throws SQLException {
Statement statement = connectioncreateStatement();
String sql = "create table USERS("
+ " ID BIGINT not null generated by default as identity,"
+ " USER_NAME VARCHAR(20) not null,"
+ " PASSWORD VARCHAR(20),"
+ " constraint P_KEY_1 primary key (ID))";
statementexecute(sql);
sql = "create unique index USER_NAME_INDEX on USERS ("
+ " USER_NAME ASC)";
statementexecute(sql);
statementclose();
}
创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,
GENERATED BY ALWAYS AS IDENTITY
GENERATED BY DEFAULT AS IDENTITY
By always和by default是说明生成这个IDENTITY的方式。
By always是完全由系统自动生成。
by default是可以由用户来指定一个值。
编写与USERS表对应的javabean(这个就不多说了),:
代码
public class User implements Serializable {
/
/
private static final long serialVersionUID = 1L;
private Long id;
private String userName;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
thisid = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
thisuserName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
}
接下来就可以就数据库进行增删改查的 *** 作了:
插入数据:
代码
private void create(User user) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("insert into users (user_name,password) values(,)");
int index = 1;
statementsetString(index++, usergetUserName());
statementsetString(index++, usergetPassword());
statementexecute();
usersetId(thisgetId(connection));
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
代码
private Long getId(Connection connection) throws SQLException {
CallableStatement callableStatement = connection
prepareCall("values identity_val_local()");
ResultSet resultSet = callableStatementexecuteQuery();
resultSetnext();
Long id = resultSetgetLong(1);
resultSetclose();
callableStatementclose();
return id;
}
getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值感觉还是有点想sequence的curr_val
修改数据:
代码
private void update(User user) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("update users set user_name=,password= where id=");
int index = 1;
statementsetString(index++, usergetUserName());
statementsetString(index++, usergetPassword());
statementsetLong(index++, usergetId());
statementexecute();
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
删除数据:
代码
public void delete(Long id) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("delete from users where id=");
statementsetLong(1, id);
statementexecute();
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
查询数据:
代码
public User findById(Long id) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("select user_name,password from users where id=");
statementsetLong(1, id);
ResultSet resultSet = statementexecuteQuery();
User user = null;
if (resultSetnext()) {
user = new User();
usersetId(id);
usersetUserName(resultSetgetString("user_name"));
usersetPassword(resultSetgetString("password"));
}
resultSetclose();
statementclose();
connectioncommit();
return user;
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
你创建第一个gettogetherword对象时,会建一个表,再创建第二个的时候不管你的表删没删都不会再创建了,除非你删除数据库,那样才会建新表。可能是你删了表吧,第一次应该会建的。
你先删除数据库,然后debug跟踪一下看看有没有执行建表语句。
我有一个疑问就是你在哪里看到的数据库,是一个名字为note的文件吗?我这里有表在里面啊,如果看到数据库应该是有表的,如果建表语句有问题会报错的。我觉得你应该没有打开数据库,你在创建gettogetherword对象语句后紧跟一句SQLiteDatabase myDB=DBHelpergetWritableDatabase();试试。
赛迪网-IT技术报道Mysql数据库迁移Oracle数据库具体程:需要准备工具:1连接Mysql
jdbc
驱
mysql-connector-java-504-binjar
2Oracle公司发SQL
Developer
12
面配置SQL
Developer
12
配置环境:选择Tools-Preferences
-Database-Third
Party
JDBC
Driver
点击
Add
Entry
添加Mysqljdbc
驱
配置MySQLOracle连接
点击Connection
右键选择
New
Connection
别建立Mysql
Oracle连接
建立连接查看数据库
两种迁移数据式:1
Capture
the
source
database
or
tables
2
Convert
the
captured
database
or
tables
3
Generate
DDL
for
the
new
Oracle
schema
objects
4
Run
the
generated
DDL
script
to
create
the
new
user
and
objects
5
Copy
any
data
from
the
source
database
to
the
new
database,select
Migration->Migration
Data
select
a
converted
model
快速迁移:
选择要迁移表或数据库选择Migration
->
Quick
Migrate
(责任编辑:卢兆林)
如下,插入一条记录的时候可以这样返回id(一下代码只是说明事例)://保存一个test对象,并返回该对象 public Test save(Test test){ KeyHolder keyHolder = new GeneratedKeyHolder(); getJdbcTemplate()update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement( Connection con) throws SQLException { PreparedStatement ps = conprepareStatement("insert into tb_test (name,sex) values (,)", StatementRETURN_GENERATED_KEYS); pssetString(1, testgetName()); pssetString(2, testgetSex()); return ps; } }, keyHolder); //这里可以获得数据库id testsetId(IntegervalueOf(keyHoldergetKeyList()get(0) toString())); return test; } // 批量插入, public List<Test> saveOrUpdateAll(final List<Test> list) { getJdbcTemplate()batchUpdate( "insert into tb_test (name,sex) values (,)", new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { pssetString(1, listget(i)getName()); pssetString(2, listget(i)getSex()); } @Override public int getBatchSize() { return listsize(); } }); //哪个方法可以获得list中每个test对象的id我不想重新进行查询 return list; } 问题补充:飞雪无情 写道你已经写好了插入一个对象的方法,就是public Test save(Test test),批量插入的时候可以直接使用该方法的。# public List<Test> saveOrUpdateAll(final List<Test> list) { List<Test> resultList=new ArrayList<Test>(); for(Test test:list){ resultListadd(save(test)); } return resultList; } 这样就好了。我也考虑过这样的方式,但是把:getJdbcTemplate()update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement( Connection con) throws SQLException { PreparedStatement ps = conprepareStatement("insert into tb_test (name,sex) values (,)", StatementRETURN_GENERATED_KEYS); pssetString(1, testgetName()); pssetString(2, testgetSex()); return ps; } }, keyHolder); 这么一段代码放在循环里面,会不会性能有些影响吧?Spring既然提供了batchUpdate,该会不会在批处理上有些性能优势呢 问题补充:飞雪无情 写道spring这个批量插入有点限制,比如你这个特殊需要,我感觉它实现不了,所以你用我上面说的那个方法迂回实现。我感觉性能方面应该不会有太大的影响。你看spring的批量插入的时候这个BatchPreparedStatementSetter借口的方法setValues(PreparedStatement ps, int i) ,提供了一个索引i,它肯定也遍历了,要么怎么知道i的值。所以有特殊需求的时候就用上面那种方案,没有的时候推荐用spring提供了批量 *** 作,我们项目中就这么做的。看了Spring这两个方法的源码,觉得这个东西在封装的时候考虑的不是很周全,确实局限性太大了,比如我批量保存的时候有可能一部分是插入,一部分是更新,这个时候也只能按照你说的这种方式了,比较而言还是orm框架持久层用起来的方便。spring的这个两个方法看了源码感觉在设计上确实存在缺陷,灵活性不够,其实返回数据库执行的条数意义根本就不大//其实我想的是这样的一个方法 / @author BAOSJ @date 2010-7-2 @param sql @param values @param batchSize @return @throws Exception / public List<Object> saveOrUpdateAll(String sql, List<Object[]> values, Integer batchSize) throws Exception { ResultSet rs = null; PreparedStatement ps = null; Connection conn = null; // 返回执行对象的id List<Object> ids = new ArrayList<Object>(); try { conn = getConnection(); connsetAutoCommit(false); ps = connprepareStatement(sql, PreparedStatementRETURN_GENERATED_KEYS); for (int i = 0; i < valuessize(); i++) { Object[] objects = valuesget(i); for (int j = 0; j < objectslength; j++) { pssetObject(i + 1, objects[j]); } if (i % batchSize == 0 || valuessize() <= batchSize) { psexecuteBatch(); rs = psgetGeneratedKeys(); int c = 0; while (rsnext()) { idsadd(rsgetObject(c)); c++; } } } conncommit(); } catch (Exception e) { connrollback(); throw e; } finally { destroy(rs, ps, conn); } return ids; } //update源码 public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) throws DataAccessException { AssertnotNull(generatedKeyHolder, "KeyHolder must not be null"); loggerdebug("Executing SQL update and returning generated keys"); Integer result = (Integer) execute(psc, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException { int rows = psexecuteUpdate(); List generatedKeys = generatedKeyHoldergetKeyList(); generatedKeysclear(); ResultSet keys = psgetGeneratedKeys(); if (keys != null) { try { RowMapper rowMapper = getColumnMapRowMapper(); RowMapperResultSetExtractor rse = new RowMapperResultSetExtractor(rowMapper, 1); generatedKeysaddAll((List) rseextractData(keys)); } finally { JdbcUtilscloseResultSet(keys); } } if (loggerisDebugEnabled()) { loggerdebug("SQL update affected " + rows + " rows and returned " + generatedKeyssize() + " keys"); } return new Integer(rows); } }); return resultintValue(); } //batchUpdate源码 public int[] batchUpdate(String sql, final BatchPreparedStatementSetter pss) throws DataAccessException { if (loggerisDebugEnabled()) { loggerdebug("Executing SQL batch update [" + sql + "]"); } return (int[]) execute(sql, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException { try { int batchSize = pssgetBatchSize(); InterruptibleBatchPreparedStatementSetter ipss = (pss instanceof InterruptibleBatchPreparedStatementSetter (InterruptibleBatchPreparedStatementSetter) pss : null); if (JdbcUtilssupportsBatchUpdates(psgetConnection())) { for (int i = 0; i < batchSize; i++) { psssetValues(ps, i); if (ipss != null && ipssisBatchExhausted(i)) { break; } psaddBatch(); } return psexecuteBatch(); } else { List rowsAffected = new ArrayList(); for (int i = 0; i < batchSize; i++) { psssetValues(ps, i); if (ipss != null && ipssisBatchExhausted(i)) { break; } rowsAffectedadd(new Integer(psexecuteUpdate())); } int[] rowsAffectedArray = new int[rowsAffectedsize()]; for (int i = 0; i < rowsAffectedArraylength; i++) { rowsAffectedArray[i] = ((Integer) rowsAffectedget(i))intValue(); } return rowsAffectedArray; } } finally { if (pss instanceof ParameterDisposer) { ((ParameterDisposer) pss)cleanupParameters(); } } } }); }
问题一:怎么样查看数据库名称 select from v$instance;埂询当前数据库名称oralce
select instance_name from v$instance 针对数据库名查询
问题二:在mysql中怎么样查看所在的数据库名 使用show databases;就能列出你有权限 *** 作的数据库名,如果你只有一个数据库权限,那么列出来的就是你当前的数据库名。
问题三:新手:怎么使用查看自己所使用的数据库名称 查看一个SQL数据库的用户名步骤: 1、找到并打开Microsoft SQL server management studio 2、使用windows帐户或SQL帐户连接数据库 3、依次展开数据库――secunity――logins,即可看到SQL的所有用户。
问题四:怎么查看oracle数据库名字, :\oracle\product\1020\db_1\NETWORK\ADMIN\tnsnamesora
打开这个文件tnsnamesora,里面能看到
问题五:怎么查看Oracle数据库中的所有用户名 用数据字典
select from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号耽如sys,system
select from all_users; 查看你能管理的所有用户!
select from user_users; 查看当前用户信息 !
问题六:oracle 怎么查看当前数据库的名称 windows 中
1 select name from v$database ;
直接运行就可以查看了,
2查看tnsnamesora 的连接,有个SID,SID就是服务名了
1查看oracle的安装目录,方法是查看注册表:如:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOME REG_SZ E:\ORACLE\ORA92 得到了oracle的安装目录一般来讲,如果服务器在安装时采用的是默认值那么这个值是:D:\ORACLE\ORA922找到tnsnamesora文件在根目录下面找到\network\ADMIN\tnsnamesora 文件,并打开3仔细查看里面的tnsnamesora 配置例如# TNSNAMESORA Network Configuration File: d:\oracle\ora92\network\admin\tnsnamesora# Generated by Oracle configuration toolsWZZ=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = wzz)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = WZZ) ))其中的service_name就是服务名,例如对如上面的文件 ,服务名就是WZZ附 C#获取oracle服务器名 :
#region 从注册表中读取安装主目录的值 / / 从注册表中读取安装主目录的值 / / / public static string ReadHomeDirectory(string setupKey) { RegistryKey readKey; try { readKey = RegistryLocalMachineOpenSubKey (Software\\ORACLE, false); foreach (string name in readKeyGetValueNames()) { if (name == setupKey) { return readKeyGet>>
问题七:怎么查看sql server 数据库的实例名 win键+R,输入servicesmsc,打开Windows服务列表,查找sql开头的服务,名称就包括了实例名。
问题八:oracle怎么查询数据库名称 [[email protected] ~]$ sqlplus / as sysdba
SQLPlus: Release 112040 Production on 星期五 2月 27 14:38:40 2015
Copyright (c) 1982, 2013, Oracle All rights reserved
连接到:
Oracle Database 11g Enterprise Edition Release 112040 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string prodsvr
SQL> select database_name from v$database;
DATABASE_NAME
--------------------------------------------------------------------------------
PRODSVR
SQL>
问题九:怎么查看mysql数据库的名字 使用show databases;就能列出你有权限 *** 作的数据库名,
如果你只有一个数据库权限,那么列出来的就是你当前的数据库名。
问题十:在mysql中怎么样查看所在的数据库名 可以使用这几种方式:
(1)用select database()语句;
select database();(2)用show tables语句,查询出来的结果中,第一行为Tables_in_,这里就
是当前所在的数据库名称。
show tables;(3)用status语句,查询出来的结果中有一行是currrent database:。这里就
是当前所在的数据库名称。
status;希望可以帮到你。
以上就是关于maven 插件如何生成联合主键的entity,需要怎么配置generatedKey全部的内容,包括:maven 插件如何生成联合主键的entity,需要怎么配置generatedKey、求Statement接口的RETURN_GENERATED_KEYS详解【JAVA】、javaDB数据库问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)