Activerecord::JDBCError: Invalid column number

Hi,

I'm rather new to Ruby and RoR, so I do not really know whether this ist the right forum to place my question.

For my first 'project' I planned to create a simple online-viewer, which grabs data from an existing database and make them visible in a structured form via browsers. So I thought that could be the right beginner-project, because I have only read datasets without any editing or creating.

The existing database is a very old one (Pervasive 8.7) and the db-design is poor, but that is all I have and I have to live with it.

Fortunately there are JDBC-Drivers, so a connection via activerecord-jdbc-adapter will work... I thought.

Within the services of Netbeans using those JDBC-Drivers I'm able to establish a connection to the database and the IDE shows me all available tables and there referring datasets.

The content of database.yml is only:

development:   adapter: jdbc   username:   password:   driver: com.pervasive.jdbc.v2.Driver   url: jdbc:pervasive://192.168.0.130:1583/database

No test-db and no production-db, because the development-db is read-only.

After putting these tow lines into the environment.rb:

$CLASSPATH << "file:///#{Rails.root}/lib/java/pvjdbc2.jar" $CLASSPATH << "file:///#{Rails.root}/lib/java/pvjdbc2x.jar"

the application started with webrick gives no error-message, so I think, that the JDBC-drivers are loaded correctly.

Now I made a model mandate_file.rb which contains

class MandateFile < ActiveRecord::Base

  # fix non-standard table and primary key name conventions   set_table_name "STAMM"   set_primary_key :D_LFDNR

  # fix the upper-cased named columns         alias_attribute :id, :D_LFDNR   alias_attribute :annotext_az, :D_AZ   alias_attribute :name_creditor, :D_RUBGE

end

When I try to create a simple object via the console using "m = MandateFile.new" I get the following list of errors:

ActiveRecord::JDBCError: Invalid column number         from arjdbc/jdbc/RubyJdbcConnection.java:121:in `columns'         from c:/jruby/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-1.1.1/lib/arjdbc/jdbc/adapter.rb:229:in `jdbc_columns'         from c:/jruby/lib/ruby/gems/1.8/gems/activerecord-3.0.7/lib/active_record/base.rb:680:in `columns'         from c:/jruby/lib/ruby/gems/1.8/gems/activerecord-3.0.7/lib/active_record/persistence.rb:284:in `attributes_from_column_definition'         from c:/jruby/lib/ruby/gems/1.8/gems/activerecord-3.0.7/lib/active_record/locking/optimistic.rb:62:in `attributes_from_column_definition'         from c:/jruby/lib/ruby/gems/1.8/gems/activerecord-3.0.7/lib/active_record/base.rb:1395:in `initialize'         from (irb):1:in `evaluate'         from org/jruby/RubyKernel.java:1088:in `eval'         from C:/jruby/lib/ruby/1.8/irb.rb:158:in `eval_input'         from C:/jruby/lib/ruby/1.8/irb.rb:271:in `signal_status'         from C:/jruby/lib/ruby/1.8/irb.rb:155:in `eval_input'         from org/jruby/RubyKernel.java:1418:in `loop'         from org/jruby/RubyKernel.java:1191:in `catch'         from C:/jruby/lib/ruby/1.8/irb.rb:154:in `eval_input'         from C:/jruby/lib/ruby/1.8/irb.rb:71:in `start'         from org/jruby/RubyKernel.java:1191:in `catch'         from C:/jruby/lib/ruby/1.8/irb.rb:70:in `start'         from c:/jruby/lib/ruby/gems/1.8/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'         from c:/jruby/lib/ruby/gems/1.8/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'         from c:/jruby/lib/ruby/gems/1.8/gems/railties-3.0.7/lib/rails/commands.rb:23:in `(root)'         from org/jruby/RubyKernel.java:1038:in `require'         from script\rails:6:in `(root)

I've googled for 'Invalid column number' but found nothing, what might be helpful.

I think, that I make a very simple mistake, but I've no idea about it. Are there any hints for me?

Thanks in advance!

Klaus

Hi,

I'm rather new to Ruby and RoR, so I do not really know whether this ist the right forum to place my question.

For my first 'project' I planned to create a simple online-viewer, which grabs data from an existing database and make them visible in a structured form via browsers. So I thought that could be the right beginner-project, because I have only read datasets without any editing or creating.

The existing database is a very old one (Pervasive 8.7) and the db-design is poor, but that is all I have and I have to live with it.

Fortunately there are JDBC-Drivers, so a connection via activerecord-jdbc-adapter will work... I thought.

Within the services of Netbeans using those JDBC-Drivers I'm able to establish a connection to the database and the IDE shows me all available tables and there referring datasets.

The content of database.yml is only:

development: adapter: jdbc username: password: driver: com.pervasive.jdbc.v2.Driver url: jdbc:pervasive://192.168.0.130:1583/database

No test-db and no production-db, because the development-db is read-only.

Check to make sure your columns in your model are correctly listed. It sounds like it is trying to use the id column or numerically increment a column that is not numeric.

Also, if the database is read only then MandateFile.new is not going to work anyway since you won't be able to save the record.

B.

Okay, I've choesen an other table with only 11 columns and listed them all:

class MandateFile < ActiveRecord::Base

  # fix non-standard table and primary key name conventions   set_table_name :AZLOELOG   set_primary_key :D_AZLOGNR

  alias_attribute :id, :D_AZLOGNR   alias_attribute :annotext_az, :D_AZLOAGAZ   alias_attribute :name_debtor, :D_AZLOGRUB1   alias_attribute :name_creditor, :D_AZLOGRUB2   alias_attribute :delete_date, :D_AZLOGDAT   alias_attribute :delete_user, :D_AZLOGUSER   alias_attribute :not_used, :D_AZLOGFREE   alias_attribute :log_sign, :D_AZLOGKE   alias_attribute :delete_year, :D_AZLOGAZJAHR   alias_attribute :delete_counter, :D_AZLOGAZZAEHL   alias_attribute :reserved, :D_AZLOGRES

end

I've also switched the database access to 'read+write'. Column's D_AZLOGNR datatype is integer. IMHO I did and checked all that Bryan told me, but the result is the same: ActiveRecord::JDBCError: Invalid column number

Any mory suggestions?

Do you get the same behavior if you just call 'MandateFile.columns'? I suspect you will - this sounds like an issue with the JDBC driver rather than your code. You might want to try the AR-JDBC JIRA and/or mailing lists:

http://kenai.com/jira/browse/ACTIVERECORD_JDBC

--Matt Jones

Matt Jones wrote in post #997376:

Do you get the same behavior if you just call 'MandateFile.columns'?

Hi Matt,

MandateFile.columns quits with

RuntimeError: The driver encountered an unknown error: java.lang.NullPointerException: null

I suspect you will - this sounds like an issue with the JDBC driver rather than your code.

Maybe, but if its so, it must be in addition to activerecord, because I used the same JDBC driver several months ago to establish a connection through pure Java and I was able to query the database via simple SQL-Statements.

You might want to try the AR-JDBC JIRA and/or mailing lists:

http://kenai.com/jira/browse/ACTIVERECORD_JDBC

Thanks, I will take a look at these.

Greetings

Klaus