mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	Also handle Postgresql sending type VARCHAR for TEXT column and setting length to b x7FFFFFF when the length is unknown. modified: storage/connect/Client.java modified: storage/connect/JavaWrappers.jar modified: storage/connect/JdbcInterface.java modified: storage/connect/PostgresqlInterface.java modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/mysql-test/connect/r/jdbc_postgresql.result modified: storage/connect/mysql-test/connect/t/jdbc_postgresql.test modified: storage/connect/mysql-test/connect/t/jdbconn.inc modified: storage/connect/plgdbsem.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h
		
			
				
	
	
		
			200 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
 | 
						|
package wrappers;
 | 
						|
 | 
						|
import java.io.BufferedReader;
 | 
						|
import java.io.Console;
 | 
						|
import java.io.IOException;
 | 
						|
import java.io.InputStreamReader;
 | 
						|
import java.sql.Date;
 | 
						|
import java.sql.Time;
 | 
						|
import java.sql.Timestamp;
 | 
						|
 | 
						|
public class Client {
 | 
						|
    static boolean    	 DEBUG = true;
 | 
						|
    static final Console c = System.console();
 | 
						|
    static JdbcInterface jdi = null;
 | 
						|
   
 | 
						|
	public static void main(String[] args) {
 | 
						|
		int rc, n, ncol, i = 0, fsize = 0;
 | 
						|
		boolean scrollable = false;
 | 
						|
		String  s;
 | 
						|
		String[] parms = new String[4];
 | 
						|
		
 | 
						|
	    if (args.length > 0)
 | 
						|
	         try {
 | 
						|
	             i = Integer.parseInt(args[i]);
 | 
						|
	         } catch (NumberFormatException e) {
 | 
						|
	             i = 0;
 | 
						|
	         } // end try/catch
 | 
						|
	    
 | 
						|
	    switch (i) {
 | 
						|
	    case 1:
 | 
						|
	    	jdi = new ApacheInterface(DEBUG);
 | 
						|
	    	break;
 | 
						|
	    case 2:
 | 
						|
	    	jdi = new MysqlInterface(DEBUG);
 | 
						|
	    	break;
 | 
						|
	    case 3:
 | 
						|
	    	jdi = new MariadbInterface(DEBUG);
 | 
						|
	    	break;
 | 
						|
	    case 4:
 | 
						|
	    	jdi = new OracleInterface(DEBUG);
 | 
						|
	    	break;
 | 
						|
	    case 5:
 | 
						|
	    	jdi = new PostgresqlInterface(DEBUG);
 | 
						|
	    	break;
 | 
						|
	    default:
 | 
						|
			jdi = new JdbcInterface(DEBUG);
 | 
						|
	    } // endswitch i
 | 
						|
		
 | 
						|
		parms[0] = getLine("Driver: ", false);
 | 
						|
		parms[1] = getLine("URL: ", false);
 | 
						|
		parms[2] = getLine("User: ", false);
 | 
						|
		parms[3] = getLine("Password: ", true);
 | 
						|
		s = getLine("Fsize: ", false);
 | 
						|
		fsize = (s != null) ? Integer.parseInt(s) : 0;
 | 
						|
		s = getLine("Scrollable: ", false);
 | 
						|
		scrollable = (s != null) ? s.toLowerCase().charAt(0) != 'n' : false;
 | 
						|
		
 | 
						|
		rc = jdi.JdbcConnect(parms, fsize, scrollable);
 | 
						|
		
 | 
						|
		if (rc == 0) {
 | 
						|
		  String query;
 | 
						|
		  System.out.println("Successfully connected to " + parms[1]);
 | 
						|
		  
 | 
						|
		  s = jdi.GetQuoteString();
 | 
						|
		  System.out.println("Qstr = '" + s + "'");
 | 
						|
		  
 | 
						|
		  while ((query = getLine("Query: ", false)) != null) {
 | 
						|
		    n = jdi.Execute(query);
 | 
						|
		    System.out.println("Returned n = " + n);
 | 
						|
		    
 | 
						|
		    if ((ncol = jdi.GetResult()) > 0)
 | 
						|
  		      PrintResult(ncol);
 | 
						|
		    else
 | 
						|
		      System.out.println("Affected rows = " + n);
 | 
						|
		    
 | 
						|
		  } // endwhile
 | 
						|
		  
 | 
						|
		  rc = jdi.JdbcDisconnect();
 | 
						|
		  System.out.println("Disconnect returned " + rc);
 | 
						|
		} else
 | 
						|
		  System.out.println(jdi.GetErrmsg() + " rc=" + rc);
 | 
						|
		
 | 
						|
	} // end of main
 | 
						|
 | 
						|
	private static void PrintResult(int ncol) {
 | 
						|
    	// Get result set meta data
 | 
						|
    	int i;
 | 
						|
    	Date date = new Date(0);
 | 
						|
    	Time time = new Time(0);
 | 
						|
    	Timestamp tsp = new Timestamp(0);
 | 
						|
    	String columnName;
 | 
						|
		Object job;
 | 
						|
 | 
						|
    	// Get the column names; column indices start from 1
 | 
						|
    	for (i = 1; i <= ncol; i++) {
 | 
						|
    		columnName = jdi.ColumnName(i);
 | 
						|
    		
 | 
						|
    		if (columnName == null)
 | 
						|
    			return;
 | 
						|
 | 
						|
    		// Get the name of the column's table name
 | 
						|
    		//String tableName = rsmd.getTableName(i);
 | 
						|
    		
 | 
						|
    		if (i > 1)
 | 
						|
		    	System.out.print("\t");
 | 
						|
    		
 | 
						|
    		System.out.print(columnName);
 | 
						|
    	} // endfor i
 | 
						|
    	
 | 
						|
    	System.out.println();
 | 
						|
	    
 | 
						|
	    // Loop through the result set
 | 
						|
	    while (jdi.ReadNext() > 0) {
 | 
						|
	    	for (i = 1; i <= ncol; i++) {
 | 
						|
	    		if (i > 1)
 | 
						|
			    	System.out.print("\t");
 | 
						|
	    		
 | 
						|
	    		if (DEBUG)
 | 
						|
	    			System.out.print("(" + jdi.ColumnType(i, null) + ")");
 | 
						|
	    		
 | 
						|
	    		switch (jdi.ColumnType(i, null)) {
 | 
						|
	    		case java.sql.Types.VARCHAR:
 | 
						|
	    		case java.sql.Types.LONGVARCHAR:
 | 
						|
	    		case java.sql.Types.CHAR:
 | 
						|
				case 1111:
 | 
						|
			    	System.out.print(jdi.StringField(i, null));
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.INTEGER:
 | 
						|
			    	System.out.print(jdi.IntField(i, null));
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.BIGINT:
 | 
						|
			    	System.out.print(jdi.BigintField(i, null));
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.TIME:
 | 
						|
	    			time.setTime((long)jdi.TimeField(i, null) * 1000);
 | 
						|
			    	System.out.print(time);
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.DATE:
 | 
						|
	    			date.setTime((long)jdi.DateField(i, null) * 1000);
 | 
						|
			    	System.out.print(date);
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.TIMESTAMP:
 | 
						|
	    			tsp.setTime((long)jdi.TimestampField(i, null) * 1000);
 | 
						|
			    	System.out.print(tsp);
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.SMALLINT:
 | 
						|
			    	System.out.print(jdi.IntField(i, null));
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.DOUBLE:
 | 
						|
	    		case java.sql.Types.REAL:
 | 
						|
	    		case java.sql.Types.FLOAT:
 | 
						|
	    		case java.sql.Types.DECIMAL:
 | 
						|
	    			System.out.print(jdi.DoubleField(i, null));
 | 
						|
	    			break;
 | 
						|
	    		case java.sql.Types.BOOLEAN:
 | 
						|
	    			System.out.print(jdi.BooleanField(i, null));
 | 
						|
	    		default:
 | 
						|
					job = jdi.ObjectField(i, null);
 | 
						|
					System.out.print(job.toString());
 | 
						|
	    			break;
 | 
						|
	    		} // endswitch Type
 | 
						|
	    		
 | 
						|
	    	} // endfor i
 | 
						|
	    	
 | 
						|
	    	System.out.println();
 | 
						|
	    } // end while rs
 | 
						|
 | 
						|
	} // end of PrintResult
 | 
						|
 | 
						|
	  // ==================================================================
 | 
						|
	  private static String getLine(String p, boolean b) {
 | 
						|
	    String response;
 | 
						|
	    
 | 
						|
	    if (c != null) {
 | 
						|
	      // Standard console mode
 | 
						|
	      if (b) {
 | 
						|
	        response = new String(c.readPassword(p));
 | 
						|
	      } else
 | 
						|
	        response = c.readLine(p);
 | 
						|
 | 
						|
	    } else {
 | 
						|
	      // For instance when testing from Eclipse
 | 
						|
	      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 | 
						|
	      
 | 
						|
	      System.out.print(p);
 | 
						|
	      
 | 
						|
	      try {
 | 
						|
	    	// Cannot suppress echo for password entry
 | 
						|
	    	response = in.readLine();
 | 
						|
	      } catch (IOException e) {
 | 
						|
	    	response = "";
 | 
						|
	      } // end of try/catch
 | 
						|
	      
 | 
						|
	    } // endif c
 | 
						|
 | 
						|
	    return (response.isEmpty()) ? null : response;
 | 
						|
	  } // end of getLine
 | 
						|
 | 
						|
} // end of class Client
 |