Accessing database in a different os
My java application runs in a unix machine. the database (sql) is in a windows nt machine. Can i access the database. If so what modification should i do?
Hello
First, what kind of database are you using? Is a JDBC driver available. Maybe you look at the web-page of your database manufacturer.
Second, are you likely to use the JDBC API. You can find documentation for this in the Java API documentation in the package 'java.sql'.
Third, do you have any restrictions like firewall/proxy or whatever what prohibits you to establish a TCP connection between your Unix and your Windows machine?
In principle, the JDBC can be used to access a database, regardless where your database is located (as long as you can provide an URL to your database) and regardless what OS your database is running on. Furthermore, your host running the database even doesn't need to have Java installed because the JDBC is an interface to the native database protocol.
Please, if you can provide more information, maybe I can help you more detailed.
Similar Messages
-
APEX Application accessing data from two different databases
Hi All,
Currently as we all know that APEX Application resides in database and is connected to the schema of that database.
I want APEX Application to be running and accessing data from two different databases. Elaborating my question,
Currently, my APEX Production Application is connected with XXXX Schema of DB1 Database(Where APEX Resides). Now I want to add some pages into this APEX Application for REPORT Purpose, But I want to connect this REPORT APEX Pages to get data from Different Schema YYYY for Database DB2.
Is it possible to configure this scenario?
The reason for doing this is to avoid the REPORT related (adhoc queries) resource utilization effect on Production DB1 Database.
Thanks
Nil1. If you do the joining of two or more tables in DB1 then all data is pulled over to DB1 and then the join is executed: so more data over the databaselink and more work for DB1. Better keep the joining stuff where the data resides and just pull exactly that data over that you need.
2. Don't know about your different block sizes. Seems a nice question for one of the other forums (DBA or SQL).
3. I mean create synonyms on DB1 for reports VIEWS in DB2.
Hope all is clear! -
Accessing the same database file using different handles/cursors
Will there be any problems accessing the same database file using different DB handles in a transactional environment? We have implemented a process which have multiple transient threads coming up and initiating DB opens and read/write operations to the same database file using different handles and cursors?
Can this potentially create any problems/bottlenecks? Can someone suggest the best way to deal with this scenario?
Thanks in advance.
SBHi,
Berkeley DB is well suited to the scenario you describe. You need to ensure that Berkeley DB is configured correctly for transactional access, the best information describing the requirements is in the Reference guide here:
http://download.oracle.com/docs/cd/E17076_02/html/programmer_reference/transapp.html
If there will be multiple threads operating concurrently, then you will need to design your application to detect and deal with deadlock situations.
Regards,
Alex Gorrod
Oracle Berkeley DB -
Is it possible to access a database on a different server?
Hi Folks
Forgive me if this has been asked already. We are in the
process of moving one of our sites to a new server. It will reside
there alone. I have several Access databases that are shared
between two different websites. Now these sites will reside on two
different servers. Is there any way to access one Access database
that resides on one server from another server? The good part is
the second sever will be using the data for read-only outputs.
Thanks in advance for any help you can priocdie.
JohnMS Access is not really intended for networking in this
manner, and I would imagine that you would have problems with
locking contention at the very least with two CF servers vying for
access. Also, another major problem with attempting to set up an
Access DSN where the ColdFusion server is on a different machine
from the Access database is file permission. Normally, ColdFusion
is setup on its server under an administrator account, so if you
attempt to connect to an Access database on another server over a
mapped network drive, the admin account on your CF server usually
does not have the appropriate privileges on the machine hosting the
Access database. This usually requires you to install CF under a
user account that has privileges on both machines. (There have been
tech notes on this subject in the past.)
Bottom line, not a good idea at all. I would seriously
consider migrating to anything but Access for these and many other
reasons, the least of which is that Access is usually not suitable
for anything but a development or prototype environment.
Phil -
what permission is needed for a login to access the restored database(backup from different server)
frequently reach the situation, when vendor restores a database, but he cannot access it unless I remap or add his login to the restored database. What permssion can grant the vendor so that he can but only can access the database he restored, not all other
databases.Hi George,
According to your description, When you move a database from one server that is running SQL Server to another server that is running SQL Server, a mismatch may occur between the security identification numbers (SIDs) of the logins in the master database
and the users in the user database. As other post, you can use the sp_change_users_login stored procedure to map SQL Server logins. Also , you can use the following statement after doing the restore database. It will
fix the mis-mapped SID inside the restored DB.
ALTER USER <username> WITH LOGIN = <username>
For more information, you can review the following article.
http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/MSSQLServerAdmin/do-you-still-use-sp_change_users_login/
Regards,
Sofiya Li
Sofiya Li
TechNet Community Support -
Unable to Publish Access database to SharePoint site in 2013
I have a user requesting to publish access (2007/2010) web database into SharePoint 2013. I am able to publish this database on all sites under one site collection (test) but fails on the other site (different site collection). I have compared site collection
and site features and both site collection (working and non-working one) has SharePoint Server Enterprise Site features enabled. Is there any other features that should be turned on?
Initially it looks it has succeded but then give mesesage
"Publish Failed - Your application has encountered errors while attempting to publish. The publish operation has failed and the target site has not been created. For more details, see the following tables
Moveto SharePoint Site Issues"
Move to SharePoint Site Issues
Issue
Reason
Object Type
Object Name
Field Name
There was an error uploading properties and/or data macros on this table.
Table
mytab
Errors have prevented one or more tables from being uploaded to the server.
Table
Could not save this object's changes to the server. You must enter a value in the 'Name' field.
Navigation Pane
Navigation Pane
Could not save this object's changes to the server. You must enter a value in the 'Name' field.
VBA Properties
VBA References
Could not save this object's changes to the server. You must enter a value in the 'Name' field.
Database Properties
DBProps
Could not save this object's changes to the server. You must enter a value in the 'Name' field.
Theme
Office Theme
<tfoot></tfoot>
I am unable to make any sense as it's one empty table and able to publish same table on another site (under different site collection).
MK SinHi MK,
According to your description, my understanding is that you got an error when you published Access database to SharePoint 2013.
Please deactivate SharePoint Server Enterprise Site Collection features at site collection level and deactivate SharePoint Server Enterprise Site features at site level, then activate them again, compare the result.
Per the error message, please type a value in the ‘Name’ filed, then publish the table, compare the result.
In addition, here is a similar article, please check whether it is useful for you:
http://support.microsoft.com/kb/2711562
I hope this helps.
Thanks,
Wendy
Wendy Li
TechNet Community Support -
Access Database (.mdb) on Windows Server 2012 R2 Essentials
Hi guys, thanks for your time!
SCENARIO:
- Windows Server 2012 R2 Essentials
- Windows 7 Ultimate Clients (3 clients)
- VB6 application on clients using a MS Database (.mdb) hosted on the server.
- Clients access the database (.mdb) via a mapped network drive (K:).
PROBLEM:
- Microsoft Database (.mdb) on server gets corrupted frequently.
- Clients don't "flush their changes" back to the database: database was not updated.
WORKAROUND:
- Database was moved from the server to one of the Windows 7 clients.
- Application is running OK.
CONFIGURATION:
- Permissions are correct: network and NTFS.
- No faulty network hardware: switch, cabling, NICs.
- Computers and Server hardware is new.
- UPS are used everywhere.
SOME LINKS:
SMB 3.0
- Opportunistic Locking and Read Caching on Microsoft Windows Networks.
- Windows 7 cannot
open the shared MS Access database if it's opened by another user
- Initializing the
Microsoft Jet 4.0 Database Engine Driver
- Moved to
Server 2012 getting Access Database Corruption
Oplocks
- Configuring
opportunistic locking in Windows
- Understanding
offline files
- How to
enable and disable SMBv1, SMBv2, and SMBv3
- Is it possible to
monitor and log actual queries against an Access MDB?
Now, server is useless if it is not hosting our database. Any ideas, please? Do I need to diagnose using Wireshark? Or using Sysinternals Process Monitor? I think that is a waste of time.
Thank you!Thanks for your reply.
Software is from a 3rd party provider. It currently supports concurrency. It was deployed on Windows XP. SQL Server would be a nice upgrade, however that is
not an option.
Something has changed with newer versions of Windows. That is what I am going to study in a lab I prepared with a real server and some clients.
File-sharing databases (Microsoft JET databases) are very old technology even before I was a college student. However, I have been very busy researching this technology.
It was made for multi-user environments. It is highly tied to file sharing services from Windows: SMB protocol.
Windows XP, Vista, 7 and 8 use different versions of this protocol. I think that is the root of the problem. With old technology, application was running fine.
With new technology, application is troublesome. I will check several things: JET drivers vs. ACE drivers, SMB tweaks, etc.
UPDATE:
Basically, there are 4 general answers to this issue:
1) Migrate your Access Database to SQL Server Express (or another RDBMS engine).
2) @Server: disable SMB 2.0/3.0 protocol stack by powershell command. Network speed decreases.
3) @Clients: disable client redirector caches by using regedit.
4) @Server: disable the leasing on the file server.
5) @Server: tuning Broadcom NIC parameters.
References:
- https://technet.microsoft.com/en-us/library/ff686200(WS.10).aspx
- https://msdn.microsoft.com/en-us/library/windows/desktop/aa365433(v=vs.85).aspx
- http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/Q_28482197.html
- http://tipsntricks.sherr.co.uk/stop-smb-corrupting-files/
- http://www.dataaccess.com/whitepapers/opportunlockingreadcaching.html
- https://social.technet.microsoft.com/forums/windowsserver/en-US/67baa9fd-5eaf-438e-9cc4-dc1a531b9e19/disabling-oplocksmb2-vs-fileinfocachelifetime
- https://social.technet.microsoft.com/Forums/windowsserver/en-US/7336d31b-6c24-468a-9c47-750244ae3a8c/moved-to-server-2012-getting-access-database-corruption
- https://social.technet.microsoft.com/Forums/en-US/e9567167-22db-4b8c-9f96-a08b97d507f9/server-2012-r2-file-server-stops-responding-to-smb-connections
- http://support2.microsoft.com/kb/2957623
- http://support2.microsoft.com/kb/2899011
- http://support2.microsoft.com/kb/2955164
- https://social.technet.microsoft.com/Forums/en-US/7bd0aa5b-eb95-40a8-a56d-c6013273665c/extremely-slow-smb-network-speed-server-2012-r2?forum=winserver8gen -
So we are running Microsoft Office Professional Plus 2010, Version 14.0.7015.1000
(32-bit)
This is what is installed via our Network and Network licensing.
I am trying, in vain, to read and write a .xlsx file via a C# Edit Script in a SSIS Package. And I have tried using...
string StringConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sourceFile + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
And this tells me that this has not been installed. So when I go and try and get the Microsoft Access Database Engine 2010 64-bit, which would allow me to use Microsoft.ACE.OLEDB.12.0 and allow me to read, write, and process this .xlsx file, it tells me
I cannot install it because I already have 32-bit installed and it wants me to un-install Microsoft Office 2010. Why? Because it is 32-bit? And I can't do that because this is what we have and what we're licensed for and from what I've read seems to be the
industry standard because most software vendors are ill equipped to process 64-bit right now.
So my question is this...How can I use a C# Edit Script to read and process a .xlsx file? Because if I try using...
string StringConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceFile + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
It then tells me that the file is not in that format.
Please excuse me for asking this question in a couple of different ways out here but I cannot for the life of me seem to be able to get an answer as to how I can process a .xlsx file with a C# script and which driver to use that will make this work.
Thanks for your review and am hopeful for a reply.
ITBobbyP85Hi ITBobby85,
If the excel version in the Connection Manager is Microsoft Excel 2010 (.xlsx), we should use Microsoft.ACE.OLEDB provider.
We can't install 32bit and 64bit parts of office on the same machine. We will get an error as you said when we run the installer to install the 64bit version of the Microsoft Access Database Engine 2010 Redistributable in the machine where a 32bit version
of Microsoft Office installed. To fix this issue, please download and install the 32bit version of the Microsoft Access Database Engine 2010 Redistributable with the link below:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Only one user at a time allowed to open MS Access database on a Mac share
I have an issue trying to open a Microsoft Access database from our Mac OS X Server running on XServe.
The MS Access file is stored on a Share Point on the XServe. Windows XP clients open the database. The problem is that it will only allow one user at a time to open the file. The has previously been operating fine when it was stored on a Windows server.
The Group's permissions for this Share Point allow Read & Write.
Any thoughts would be much appreciated.I think you're being misled a bit by the interface: the checkbox labelled "Strict locking" doesn't just allow strict locking, it requires it (and thus disallows byte-range locking). That is, with strict locking enabled, any client that tries to lock any part of the file actually locks the entire file. Access normally depends on byte-range locking to allow different clients to share the database (as long as they aren't trying to modify the same part of it at the same time), but with strict locking the first client locks all others out.
-
Getting the table names in an MS Access database
Hi,
I am new to JDBC and making a client/server application that updates a MS Access database through jdbc:odbc.
I need to get a list of existing user tables in the db. I have found a great document on the net which has the code, however the code doesn't work. I have tried different ways and looked every where with no success. (link to the doco: http://www-128.ibm.com/developerworks/opensource/library/j-jdbc-objects/)
Here is my dbManager class that handles all db related services in my application. I would appreciate any help I can get as I have exhusted all my avenues.
Thanks
Sep,
* dbManager.java
* Created on 31 October 2005, 10:20
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
import java.io.*;
import java.sql.*;
import java.util.regex.*;
* @author AUMahdavSe
public class dbManager {
/** Constant Declaration */
public static final String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
public static final
String sqlCreateTable = "create table TABLENAME (" +
"name varchar (100)," +
"surname varchar(100)," +
"computerType integer," +
"computerNAL varchar(20)," +
"haveMonitor integer," +
"monitorNAL varchar (20)," +
"auditDate varchar(10) );";
public static final String sqlUpdateTable = "insert into TABLENAME values" +
" (NAMEHOLDER, SURNAMEHOLDER, COMPTYPE, COMPNAL, HAVEMON, MONNAL);";
/** Attributes */
private String dbURL = "jdbc:odbc:";
private String Username = "admin"; // user input
private String Password = "purina123"; // user input
private String ODBCDataSource; // config file
private String dbPath; // set through config file or defaults to current folder
private String configFile = "config.txt"; // set either at commandline or defaults to current folder
private Connection con = null;
private Statement stmt = null;
private ResultSet tables;
private DatabaseMetaData dma;
private ResultSetMetaData rsmd;
private String CurrentAuditTable = "TestTable2";
int numCols, i;
/** Set Methodes */
public void setUsername( String usr ) {
this.Username = usr;
public void setPassword( String pswd ) {
this.Password = pswd;
public void setDbPath( String path ) {
this.dbPath = path;
public void setODBCDataSource( String ds ) {
this.ODBCDataSource = ds;
public void setDbURL( String dsname ) {
this.dbURL = this.dbURL + dsname;
/** Get Methodes */
public String getDriver() {
return this.Driver;
// can be run only after a connection obj is setup
public void getMDA() {
try {
this.dma = this.con.getMetaData();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
public void getDBTables() {
//now dump out the names of the tables in the database
String[] types = new String[1];
types[0] = "TABLES"; //set table type mask
//note the %-sign is a wild card (not '*')
try {
this.tables = this.dma.getTables(null, null, "%", types);
dumpResults("--Tables--");
this.tables.close();
//this.listTables();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
// listing tables
/*int count = 0;
int numCols = 0;
//ResultSetMetaData rsmd;
try {
System.out.println("Listing db tables ...");
//this.tables.beforeFirst();
rsmd = this.tables.getMetaData();
numCols = rsmd.getColumnCount();
System.out.println("number of cols: " + numCols);
boolean more = this.tables.first();
System.out.println("this is why: " + more);
while ( more ) {
count++;
for (int i = 1; i <= numCols; i++)
System.out.print( "Table-" + count + " -> " + this.tables.getString(count)+" " );
System.out.println();
more = this.tables.next();
catch ( SQLException ex ) {
System.out.println( "problem listing db tables: " + ex.getMessage() );
/** Other Methodes */
// Initialize the db parameters, like driver, username, passwd, etc.
public void dbInitialize() {
// load configuration from config.txt (dbPath and ODBC Data Source name)
this.loadDbConfig();
// loadDriver
this.loadDriver();
// get username and password for the ODBC from user
this.getDSSecurity();
// populate dbURL, username and password
this.setDbURL( this.ODBCDataSource );
// connect to db
this.dbConnect();
// get db metadata
this.getMDA();
// get a list of tables in db
this.getDBTables();
// load JDBC driver
public void loadDriver() {
try {
Class.forName( getDriver() );
} catch (Exception e) {
System.out.println("Failed to load JDBC/ODBC driver.");
return;
// connects to db and create a Connection obj and a Statement obj
public void dbConnect() {
try {
this.con = DriverManager.getConnection (
this.dbURL,
this.Username,
this.Password);
this.stmt = con.createStatement();
} catch (Exception e) {
System.err.println("problems connecting to "+this.dbURL);
// creates table tblname in db
public void CreateTable( String tblname ) {
try {
String sqlcommand = mergeTblName(sqlCreateTable, tblname);
this.stmt.execute( sqlcommand );
catch (SQLException ex) {
System.err.println("problems with SQL statement sent to "+this.dbURL+
": "+ex.getMessage());
System.out.println("SQL Command: " + mergeTblName(sqlCreateTable, tblname) );
// updates db with new record(s) by executing the SQL query sqlstmt
// and closes db connection
public void dbUpdate( String sqlstmt ) {
try {
// execute SQL commands to create table, insert data
this.stmt.execute( sqlstmt );
this.con.close();
} catch (Exception e) {
System.err.println("problems with SQL sent to "+this.dbURL+
": "+e.getMessage());
// list all user tables in the db
public void listTables() {
//now dump out the names of the tables in the database
int count = 0;
try {
System.out.println("Listing db tables ...");
//this.tables.beforeFirst();
while ( this.tables.next() ) {
count++;
System.out.print( "Table-" + count + " -> " + this.tables.getString(1) );
System.out.println();
catch ( SQLException ex ) {
System.out.println( "problem listing db tables: " + ex.getMessage() );
// checks whether tbname exist in db as a table
// this function has to be called after dbConnect
public boolean tableExists( String tbname ) {
boolean tbexists = false;
//get the database metadata
try {
dma = con.getMetaData();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
//now dump out the names of the tables in the database
String[] types = new String[1];
types[0] = "TABLES"; //set table type mask
//note the %-sign is a wild card (not '*')
try {
tables = dma.getTables(null, null, "%", types);
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
try {
while ( tables.next() ) {
if ( tbname.equalsIgnoreCase( tables.getString(1) ) ) {
tbexists = true;
catch ( SQLException ex ) {
System.err.println("database connection: " + ex.getMessage());
return tbexists;
// merge tablename using REGEX
public String mergeTblName( String sqlcommand, String tbname ) {
String REGEX = "TABLENAME";
String INPUT = sqlcommand;
String REPLACE = tbname;
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
INPUT = m.replaceAll(REPLACE);
//System.out.println(INPUT);
return INPUT;
// merge feildnames specific terms using REGEX
public String mergeFldName( Message msg ) {
String sqlcommand;
sqlcommand = "insert into TABLENAME values" +
" ('" + msg.getName() + "', '" + msg.getSurname() + "', " +
msg.getComputerType() + ", '" + msg.getComputerNAL() + "', " +
msg.getHaveMonitor() + ", '" + msg.getMonitorNAL() + "', '" +
msg.getDateOfMsg() + "');";
sqlcommand = mergeTblName( sqlcommand, CurrentAuditTable );
return sqlcommand;
// get users input char
/**public char getChar() {
int i = System.in.read();
while (i != -1) {
// here's your character
char c = (char) i;
i = System.in.read();
return (char) i;
// load the config parameters from config.txt
public void loadDbConfig() {
// make a file obj pointing to the config file config.txt
File configFile = new File( this.configFile );
//...checks on configFile are elided
StringBuffer contents = new StringBuffer();
//declared here only to make visible to finally clause
BufferedReader input = null;
try {
//use buffering
//this implementation reads one line at a time
input = new BufferedReader( new FileReader(configFile) );
String line = null; //not declared within while loop
int count = 0;
while (( line = input.readLine()) != null){
//first line in config file is dbPath
if(count == 0) this.setDbPath( line.trim() );
//second line in config file is ODBCDataSource
if(count == 1) this.setODBCDataSource( line.trim() );
count++;
//contents.append(line);
//contents.append(System.getProperty("line.separator"));
catch (FileNotFoundException ex) {
System.err.println("the file congif.txt cannot be found ...");
System.err.print("Enter the path to db file (e.g. c:\\temp): ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// read the db path from the command-line; need to use try/catch with the
// readLine() method
try {
this.setDbPath( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read user input.");
System.exit(1);
System.err.print("Enter the name of the ODBC Data Source: ");
// read the ODBC Data Source name from the command-line; need to use try/catch with the
// readLine() method
try {
this.setODBCDataSource( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read user input.");
System.exit(1);
ex.printStackTrace();
catch (IOException ex){
//ex.printStackTrace();
finally {
try {
if (input!= null) {
//flush and close both "input" and its underlying FileReader
input.close();
catch (IOException ex) {
//ex.printStackTrace();
//return contents.toString();
// get datasource security details i.e. username and password
public void getDSSecurity() {
// get username
System.out.print("Enter username for the ODBC DataSource: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
this.setUsername( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read username.");
System.exit(1);
// get password
System.out.print("Enter password: ");
// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
this.setPassword( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read password.");
System.exit(1);
private void dumpResults(String head)
//this is a general routine to print out
//column headers and the contents of each column
System.out.println(head);
try
//get the number of columns from the metadata
this.rsmd = this.tables.getMetaData();
numCols = this.rsmd.getColumnCount();
//print out the column names
for (i = 1; i<= numCols; i++)
System.out.print(rsmd.getColumnName(i)+" ");
System.out.println();
//print out the column contents
boolean more = this.tables.next();
while (more)
for (i = 1; i <= numCols; i++)
System.out.print(this.tables.getString(i)+" ");
System.out.println();
more = this.tables.next();
catch(Exception e)
{System.out.println(e.getMessage());}
/** Creates a new instance of dbManager */
public dbManager() {
this.dbInitialize();
}here is the result when I make a new dbManager obj from my server class which is a multithreaded one.
H:\java>java EchoServer
Enter username for the ODBC DataSource: admin
Enter password: purina123
Tables
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
Listening for clients on 12111...
here is the code of my server class called EchoServer:
import java.net.*;
import java.io.*;
public class EchoServer
ServerSocket m_ServerSocket;
dbManager haDB;
public EchoServer()
// db methods to setup a jdbc connection to the database
haDB = new dbManager();
// list tables
//haDB.listTables();
//haDB.getDBTables();
// create table
//haDB.CreateTable("TestTable2");
// update table
// server code
try
// Create the server socket.
m_ServerSocket = new ServerSocket(12111);
catch(IOException ioe)
System.out.println("Could not create server socket at 12111. Quitting.");
System.exit(-1);
System.out.println("Listening for clients on 12111...");
// Successfully created Server Socket. Now wait for connections.
int id = 0;
while(true)
try
// Accept incoming connections.
Socket clientSocket = m_ServerSocket.accept();
// accept() will block until a client connects to the server.
// If execution reaches this point, then it means that a client
// socket has been accepted.
// For each client, we will start a service thread to
// service the client requests. This is to demonstrate a
// multithreaded server, although not required for such a
// trivial application. Starting a thread also lets our
// EchoServer accept multiple connections simultaneously.
// Start a service thread
ClientServiceThread cliThread = new ClientServiceThread(clientSocket, id++, haDB);
cliThread.start();
catch(IOException ioe)
System.out.println("Exception encountered on accept. Ignoring. Stack Trace :");
ioe.printStackTrace();
public static void main (String[] args)
new EchoServer();
class ClientServiceThread extends Thread
Socket m_clientSocket;
int m_clientID = -1;
dbManager m_db;
boolean m_bRunThread = true;
ClientServiceThread(Socket s, int clientID, dbManager db)
m_clientSocket = s;
m_clientID = clientID;
m_db = db;
public void run()
// Obtain the input stream and the output stream for the socket
// A good practice is to encapsulate them with a BufferedReader
// and a PrintWriter as shown below.
BufferedReader in = null;
PrintWriter out = null;
Message msg = new Message();
// Print out details of this connection
System.out.println("Accepted Client : ID - " + m_clientID + " : Address - " +
m_clientSocket.getInetAddress().getHostName());
try
in = new BufferedReader(new InputStreamReader(m_clientSocket.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(m_clientSocket.getOutputStream()));
// At this point, we can read for input and reply with appropriate output.
// Run in a loop until m_bRunThread is set to false
while(m_bRunThread)
// read incoming stream
String clientCommand = in.readLine();
if ( clientCommand.indexOf(",") != -1 ) {
msg.deserialize( clientCommand );
System.out.println("SQL command: " + m_db.mergeFldName(msg) );
m_db.dbUpdate( m_db.mergeFldName(msg) );
//System.out.println("Name :" + msg.getName() );
//System.out.println("Surname :" + msg.getSurname() );
//System.out.println("ComputerType :" + msg.getComputerType() );
//System.out.println("ComputerNAL :" + msg.getComputerNAL() );
//System.out.println("HaveMonitor :" + msg.getHaveMonitor() );
//System.out.println("Monitor NAL :" + msg.getMonitorNAL() );
//System.out.println("AuditDate :" + msg.getDateOfMsg() );
System.out.println("Client Says :" + clientCommand);
if(clientCommand.equalsIgnoreCase("quit"))
// Special command. Quit this thread
m_bRunThread = false;
System.out.print("Stopping client thread for client : " + m_clientID);
else
// Echo it back to the client.
out.println(clientCommand);
out.flush();
catch(Exception e)
e.printStackTrace();
finally
// Clean up
try
in.close();
out.close();
m_clientSocket.close();
System.out.println("...Stopped");
catch(IOException ioe)
ioe.printStackTrace();
}I find that taking any problem and reducing it to the simplest thing is the best way to approach it.
Why you had to post all that bloody code (especially since you didn't write it) is beyond me.
This will list all the tables in an Access database (or any other, for that matter):
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Element;
import org.jdom.Document;
import org.jdom.output.XMLOutputter;
public class TableLister
public static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
public static final String DATABASE = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\Edu\\Java\\Forum\\DataConnection.mdb";
public static final String USERNAME = "admin";
public static final String PASSWORD = "";
public static void main(String [] args)
try
String driver = ((args.length > 0) ? args[0] : DRIVER);
String url = ((args.length > 1) ? args[1] : DATABASE);
String username = ((args.length > 2) ? args[2] : USERNAME);
String password = ((args.length > 3) ? args[3] : PASSWORD);
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
DatabaseMetaData meta = conn.getMetaData();
// Bring back ALL tables and views, including SYSTEM tables.
ResultSet tables = meta.getTables(null, null, null, null);
ResultSetMetaData rsmd = tables.getMetaData();
int numColumns = rsmd.getColumnCount();
List columnNames = new ArrayList();
for (int j = 0; j < numColumns; ++j)
columnNames.add(rsmd.getColumnName(j+1));
Element root = new Element("tables");
int tableCount = 0;
while (tables.next())
Element table = new Element("table");
table.setAttribute("id", Integer.toString(++tableCount));
for (int j = 0; j < numColumns; ++j)
Element column = new Element((String)columnNames.get(j));
column.setText(tables.getString((String)columnNames.get(j)));
table.addContent(column);
root.addContent(table);
conn.close();
Document doc = new Document(root);
XMLOutputter outputter = new XMLOutputter(" ", true);
System.out.println(outputter.outputString(doc));
catch (ClassNotFoundException e)
System.err.println("Couldn't load JDBC driver class");
e.printStackTrace();
catch (SQLException e)
System.err.println("SQL state: " + e.getSQLState());
System.err.println("SQL error: " + e.getErrorCode());
e.printStackTrace();
catch (Exception e)
e.printStackTrace();
}Run it and see if it works for you. If it does, put the essence of the code into your stuff.
% -
OK - I have a customer that wants to write out to an MS Access Database from Livecycle. I know this is BAD but they have their reasons - i.e. they have a sever shortage of skills for anything more complex.
Firstly - I created a Java program to test the JDBC ODBC connection - this worked fine - ran queries and updated OK (code is attached)
Howver I have tried connecting to Access from within Livecycle in two different ways - both are failing
Firstly - using the JNDI setup for JDBC ODBC e.g.
<datasources>
<local-tx-datasource>
<jndi-name>MSAccess_DS</jndi-name>
<!-- format of URL is "jdbc:odbc:DSNNAME" -->
<connection-url>jdbc:odbc:DBFormData</connection-url>
<driver-class>sun.jdbc.odbc.JdbcOdbcDriver</driver-class>
<user-name></user-name>
<password></password>
</local-tx-datasource>
</datasources>
Calling this within a Livecycle process does not return an error to the process, but the log generates an error:
2009-08-29 23:01:30,768 WARN [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: General error)
I also tried creating a Java Component and importing it - by creating a very basic jar and importing it to livecycle (based on the same code I used in my Java testing)
It also gave me the general error - and I can see it is happening on the line:
Connection con = DriverManager.getConnection(dbURL, "","");
Any ideas on what is going wrong, or a workaround? (Assuming that I have to use Access)
Thanks
TimOK I solved this. This was only happening on the Win2K3 server - not on my local dev instance
On the server I set the JBoss service to run under the local admin account (in the Services Panel) - after a service restart the jdbc odbc connection worked fine. It must have been some permissions with the system account -
How to reference MS Access database in ColdFusion MX 7 on 64-bit Windows
I am migrating customers from:
Windows 2000 Server (fully patched)
Internet Information Services (IIS) 5
ColdFusion 5
to:
Windows Server 2003 Standard x64 Edition (fully patched)
Internet Information Services (IIS) 6 (running in 32-bit
mode)
ColdFusion MX 7 (7.0.2) Standard
Unfortunately, some of these existing customers are still
using Microsoft Access databases instead of SQL Server. Having all
of these existing customers migrate to SQL Server is not yet
practical. On the old Windows 2000 / ColdFusion 5 server, they are
using OLE DB data sources to reference the MS Access databases
using the "Microsoft.Jet.OLEDB.4.0" provider. None are configured
to use ODBC drivers when referencing MS Access or SQL Server.
I have yet to figure out how to get ColdFusion MX 7 to:
- Create a data source that references MS Access databases on
64-bit Windows.
- Reference an existing MS Access data source created with
the 32-bit version of the ODBC Data Source Manager on 64-bit
Windows.
A bit of background information regarding MS Access on 64-bit
Windows:
- At the time of this writing, Microsoft has not
created/released 64-bit drivers for Microsoft Access and it's
unlikely they ever will, for understandable reasons.
- Contrary to seemingly popular belief, the Microsoft Jet 4.0
Database Engine does exist on 64-bit Windows. See the following
regarding version and file location information:
How to obtain the latest service pack for the Microsoft Jet
4.0 Database Engine
http://support.microsoft.com/kb/239114
- You CAN create MS Access based data sources within 64-bit
Windows, but they have to be made using the 32-bit version of "ODBC
Data Source Manager". I'm assuming these DSNs may only be used by
32-bit applications, but I have not tested that theory.
32-bit data sources:
ODBC Data Source Manager:
%SystemRoot%\SysWOW64\odbcad32.exe
Registry location:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC
Default file DSN directory:
C:\Program Files (x86)\Common Files\ODBC\Data Sources
64-bit data sources:
ODBC Data Source Manager:
%SystemRoot%\system32\odbcad32.exe
Registry location:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
Default file DSN directory:
C:\Program Files\Common Files\ODBC\Data Sources
The 64-bit version of "ODBC Data Source Manager" (under
Administrative Tools) only show "SQL Server" and/or "SQL Native
Client" as options when creating new data sources, unless
third-party software is installed that supplies additional drivers.
The 32-bit version of "ODBC Data Source Manager" (by default,
there is no shortcut for this in the Start menu) shows the typical
drivers seen on 32-bit versions of Windows, including SQL Server,
SQL Native Client, Microsoft Access, Excel, FoxPro, Paradox, etc.
When using ColdFusion Administrator in ColdFusion MX 7.0.2 in
64-bit Windows 2003 (IIS is running in 32-bit mode to allow
ColdFusion MX 7 to function at all), two problems are encountered
when dealing with MS Access (and presumably other 32-bit drivers).
In both cases, ColdFusion is trying to reference the registry
location for 64-bit data sources instead of 32-bit:
1. Creating a new data source within ColdFusion
Administrator:
Data Source Name: whatever
Driver: Microsoft Access
CF Data Source Name: whatever
Database file: (physical path to whatever.mdb)
(other settings are irrelvant for this example)
Error generated when submitting:
Unable to update the NT registry.
Cannot open HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC
Data Sources: Windows error number 5 occurred.Access is denied.
ColdFusion stores the data source, however a "verify"
generates the following error:
Connection verification failed for data source: whatever
java.sql.SQLException: [Macromedia][SequeLink JDBC
Driver][ODBC Socket]internal error: Data source name not found and
no default driver specified
The root cause was that: java.sql.SQLException:
[Macromedia][SequeLink JDBC Driver][ODBC Socket]internal error:
Data source name not found and no default driver specified
2. Creating the data source using the 32-bit version of "ODBC
Data Source Manager" then trying to reference it with ColdFusion:
ODBC Data Source Manager:
System DSN or File DSN:
Name: whatever
Driver: Microsoft Access Driver (.mdb)
Database: (physical path to whatever.mdb)
(creation is successful within ODBC Data Source Manager)
Reference the above DSN within ColdFusion Administrator:
Data Source Name: whatever
Driver: ODBC Socket
Error generated when submitting:
Error accessing available odbc datasources. - Cannot open
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources:
Windows error 2 occurred.The system cannot find the file specified.
ColdFusion MX 7 can't find the 32-bit data source on 64-bit
Windows because it's looking for it in the wrong registry location.
Can ColdFusion MX 7 be configured to look in
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC
instead of
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
on a 64-bit Windows machine?Paul,
Thanks for the insight on this. Regarding the initial problem
I ran into with creating Access based DSNs, very early-on, I
noticed there were two different driver options for Access
displayed within ColdFusion MX 7 Administrator:
Microsoft Access
Microsoft Access with Unicode
For reasons I'm am still baffled over, I somehow completely
forgot about and through the wonders of apparent tunnel vision,
completely overlooked the "Microsoft Access with Unicode" driver
option when I was running through my tests.
At your seemingly-obvious suggestion, I created a data source
using the Microsoft Access with Unicode driver and it worked
perfectly fine with the one customer's web site I'm using for
testing (of course, this is a copy--the production site is still
housed on the old ColdFusion 5 server). This obviously doesn't
actually fix the underlying issue with ColdFusion looking in the
wrong part of the registry on 64-bit Windows, but at least when it
comes to dealing with Access databases, your suggestion of using
the Microsoft Access with Unicode driver appears to be a functional
work-around. So long as there aren't any surprises waiting for me,
hopefully this will also work for the remaining ColdFusion sites I
have to migrate that are using Access databases.
Since you mentioned JDBC drivers in comparison with ODBC, I'm
pointing out a couple of references in case they're helpful to
anyone following this thread:
ColdFusion MX 7 - About JDBC
http://livedocs.adobe.com/coldfusion/7/htmldocs/00001736.htm
Types of JDBC technology drivers
http://java.sun.com/products/jdbc/driverdesc.html
http://java.sun.com/products/jdbc/
I don't actually develop anything in ColdFusion, so I'm
dealing with all of this from a server administration standpoint
since we do have some domain hosting customers that do develop or
at least have existing ColdFusion based sites. I am all
too-familiar with the caveats of using Access in any kind of
production or heavily used environment and have spent years keeping
users away from ODBC. For ColdFusion users, that meant creating OLE
DB DSNs and often having to fix poorly written SQL statements and
fixing ColdFusion date-related values and boolean values (the
common problems encountered when switching CF / MS Access users
from ODBC to OLE DB). I can only recall running into problems with
a single SQL Server based ColdFusion site when migrating from ODBC
to OLE DB. That customer never did get their many coding problems
fixed, so they're the only ones still using ODBC in CF. I have no
idea what'll happen when that one site gets migrated over--if it'll
even work. Obviously a lot of things have changed between
ColdFusion 5 and the MX versions that have come along afterward.
Thanks again for the Access with Unicode driver tip and JDBC
info. It looks like I can finally start moving forward again with
the site migration process.
Josh -
MS access database prompting for username and password
Hello,
When I try to run a crystal report that is connected to a (Access Database) from crystal server 2013, I get prompted for a username and password. Im not sure what im doing wrong, Ive tried creating a ODBC connection, change the SAP service to run under a domain user account, recreated the report with a different file path. but still no luck, please help im at a lose.
Thank youHello,
Refer please to the following kbas, probably this can help you :
http://service.sap.com/sap/support/notes/1270997
http://service.sap.com/sap/support/notes/1661997
Regards,
Asma -
Conversion problems with Memo field in Access database
I have the latest version of Migration Workbench and the Access 2000 plug-in.
I am using an ODBC driver, and the SQL conversion requirements for converting
to a native driver seem too time and labor intensive to be feasable.
My problem is that I have some "Memo" columns in my Access database containing
over 200,000 rows that I need converted to Oracle. This is something I'm going
to need to do over-and-over again for different Access databases.
I gave up on mapping the Access "Memo" datatypes to Oracle "Clob" datatypes. It
was either taking forever or taking WAY too long.
Then I tried mapping the Access "Memo" datatypes to "Varchar2(4000)" and although
it completed it took longer than my customer will like (think 1/2 an hour just for
all the rows of one memo column in one table).
Finally I tried going into the original Access database and converting the "Memo"
column into a "Text" column. It wouldn't work, I kept getting the error:
=====
Microsoft Access can't change the data type.
There isn't enough disk space or memory.
=====
even though I had over 10GB of free disk space and only 1/3 of my memory was being
used. I assume this is a memory-max limitation in Access 2000.
Any suggestions for speeding the conversion? Could I stagger using Migration workbench
to create the tables. . .then use SQL*Loader to load the data. . .then use Migration
workbench again to put in the idexes, etc? Would this be faster even if it worked?
Thanks,
Aaron ChawlaI have the latest version of Migration Workbench and the Access 2000 plug-in.
I am using an ODBC driver, and the SQL conversion requirements for converting
to a native driver seem too time and labor intensive to be feasable.
My problem is that I have some "Memo" columns in my Access database containing
over 200,000 rows that I need converted to Oracle. This is something I'm going
to need to do over-and-over again for different Access databases.
I gave up on mapping the Access "Memo" datatypes to Oracle "Clob" datatypes. It
was either taking forever or taking WAY too long.
Then I tried mapping the Access "Memo" datatypes to "Varchar2(4000)" and although
it completed it took longer than my customer will like (think 1/2 an hour just for
all the rows of one memo column in one table).
Finally I tried going into the original Access database and converting the "Memo"
column into a "Text" column. It wouldn't work, I kept getting the error:
=====
Microsoft Access can't change the data type.
There isn't enough disk space or memory.
=====
even though I had over 10GB of free disk space and only 1/3 of my memory was being
used. I assume this is a memory-max limitation in Access 2000.
Any suggestions for speeding the conversion? Could I stagger using Migration workbench
to create the tables. . .then use SQL*Loader to load the data. . .then use Migration
workbench again to put in the idexes, etc? Would this be faster even if it worked?
Thanks,
Aaron Chawla -
is it possible to use access database in visual basic 2012
Hello,
There are two main methods for working with MS-Access databases in Visual Studio with VB.NET. One method you go through several steps which the IDE data wizard creates strong typed classes and assist with binding fields in the database table to controls
such as a DataGridView, ListBox, TextBoxes etc. The second method you actually write all the code which can go in two different directions.
Which one to pick is dependent on your expertise in general with VB.NET. Both have advantages and disadvantages.
The following shows the beginnings of working with data wizards in the IDE while
this page is an index for the link just provided with a mixture of examples.
If open to suggestion and dependent on your needs please consider looking at using SQL-Server since there is an Express version of SQL-Server installed with Visual Studio. SQL-Server is overall and better choice but does not mean it's best for you at this
time but worth considering.
Please remember to mark the replies as answers if they help and unmark them if they provide no help, this will help others who are looking for solutions to the same or similar problem. Contact via my webpage under my profile
but do not reply to forum questions.
Maybe you are looking for
-
Passing from MS SQL Server to Oracle. Options?
Hello, We are going to be passing from MS SQL Server to Oracle (ver 10.2.0.3 on Windows Server 2003). It looks like there is no Oracle tool which will translate TSQL code so that an Oracle database can read it. What can be used to pass SQL Server DML
-
File to IDoc scenario - IDoc received with Errors
Hi, I tried to send send IDoc from a file to SAP R\3. The communication channels are working fine, and I get the IDocs in R\3 but with status 56. When I examine the received IDoc structure in transaction "WE19", I see that the receiver port(SAP + SID
-
Can anyone give me some input on how to store XML files as CLOBs in an Oracle database, preferably using jdbc through jsp pages? null
-
Javascript Call from AS3 Playbar
Platform: Captivate 7 Source: AS3 (hopefully obvious!) Output: Flash v10 I'm making a one-off version of one of the default playbars. I am trying to make the Exit button call a JavaScript function using the following code: var btnTipsId = 8; functio
-
IMPORTING BW MODELS TO HANA STUDIO
Hi, While importing BW models to HANA studio cube not visible only DSO and infoobject visible we tried to import DSO it is not activate